Project implementation - #2735
Closed
Lee Yee Shian (yeeshian) wants to merge 61 commits into
Closed
Conversation
* feat(docs): update getting started documentation for HVE Partner Workshop - revise titles and descriptions for clarity - enhance workshop structure and role exercises - add new capstone and publishing follow-up documents - improve setup instructions for Codespaces and local VS Code * feat(agents): enhance AI Discovery Cards integration in coaching and learning materials - update dt-coach and dt-learning-tutor to recommend AI Discovery Cards for ideation - improve documentation for AI Discovery Cards workshop integration - add AI Discovery Cards context in brainstorming and RPI integration guides 🧠 - Generated by Copilot * feat(docs): add AI Discovery Cards workshop guidance for Design Thinking * docs: update metadata dates and sidebar positions in design-thinking documents 🔄 - Generated by Copilot * docs: update agent bundle section and fix typo in publishing guide - add header for agent bundle clarification - correct "sideload" to "side load" in publishing steps 🔧 - Generated by Copilot * style(docs): format tables for consistency in multiple documentation files 🔧 - Generated by Copilot * style(docs): update links in README for consistency and clarity 🔗 - Generated by Copilot * style(docs): format table for consistency in README
…2657) <!-- markdownlint-disable-file --> <!-- PR title: docs(devcontainer): document restricted-network overrides --> # Pull Request ## Description Documented the DevContainer overrides available to organizations that route images, packages, release downloads, APIs, or PowerShell modules through approved enterprise endpoints. The DevContainer README now provides a concise inventory and directs readers to the detailed guidance. The validation guide contains the complete Bash and PowerShell examples and distinguishes host-side `${localEnv:...}` values from runtime-only `dev.containers.containerEnv` settings. ## Related Issue(s) Fixes microsoft#2600 ## Type of Change Select all that apply: **Code & Documentation:** * [ ] Bug fix (non-breaking change fixing an issue) * [ ] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot agent (`.github/agents/*.agent.md`) * [ ] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Contributions **MUST** target models listed in the model catalog (`scripts/linting/model-catalog.json`) whose provider appears in `providerAllowlist` and whose status is `ga` or `preview`. Run `npm run lint:models` to validate references. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [ ] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Sample Prompts (for AI Artifact Contributions) <!-- If you checked any boxes under "AI Artifacts" above, provide a sample prompt showing how to use your contribution --> <!-- Delete this section if not applicable --> **User Request:** <!-- What natural language request would trigger this agent/prompt/instruction? --> **Execution Flow:** <!-- Step-by-step: what happens when invoked? Include tool usage, decision points --> **Output Artifacts:** <!-- What files/content are created? Show first 10-20 lines as preview --> **Success Indicators:** <!-- How does user know it worked correctly? What validation should they perform? --> For detailed contribution requirements, see: * Common Standards: [docs/contributing/ai-artifacts-common.md](../docs/contributing/ai-artifacts-common.md) - Shared standards for XML blocks, markdown quality, RFC 2119, validation, and testing * Agents: [docs/contributing/custom-agents.md](../docs/contributing/custom-agents.md) - Agent configurations with tools and behavior patterns * Prompts: [docs/contributing/prompts.md](../docs/contributing/prompts.md) - Workflow-specific guidance with template variables * Instructions: [docs/contributing/instructions.md](../docs/contributing/instructions.md) - Technology-specific standards with glob patterns * Skills: [docs/contributing/skills.md](../docs/contributing/skills.md) - Task execution utilities with cross-platform scripts ## Testing * Confirmed `git diff --check` passes. * Confirmed both documents cover every supported DevContainer override. * Confirmed the changed frontmatter dates and Markdown table alignment. * Manual testing was not applicable to this documentation-only change. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [ ] Tests added for new functionality (N/A - documentation-only change) ### AI Artifact Contributions <!-- If contributing an agent, prompt, instruction, or skill, complete these checks --> * [ ] Used `hve-builder` review mode to review contribution * [ ] Addressed all actionable findings from the `hve-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Local Checks The following local-safe validation commands must pass before merging: * [ ] Local validation aggregate: `npm run validate:local` * [ ] Documentation validation (if docs changed): `npm run validate:docs` * [ ] Spell checking: `npm run spell-check` * [ ] Link validation: `npm run lint:md-links` ## Security Considerations <!--⚠️ WARNING: Do not commit sensitive information such as API keys, passwords, or personal data --> * [x] This PR does not contain any sensitive or NDA information * [ ] Any new dependencies have been reviewed for security issues (N/A - no dependency changes) * [ ] Security-related scripts follow the principle of least privilege (N/A - no security script changes) ## Additional Notes No DevContainer behavior changed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jamie Kim <jamiekim500@gmail.com>
…plan.md output (microsoft#2590) # Pull Request ## Description Refresh `docs/agents/rai-planning/phase-reference.md` to reflect the phase-file consolidation completed in PR microsoft#2568, which merged the eight per-phase artifacts into a single `rai-plan.md` with named sections. Changes across the whole file: * Phase Summary table: replace per-phase filenames in the "Key output" column with the corresponding `rai-plan.md` sections and subsections. * Phase 1-6 Outputs sections: point every bullet to a `rai-plan.md` section anchor while preserving the descriptive content. * Phase 2-6 Inputs sections: update references to prior-phase artifacts (for example, "System definition pack from Phase 1" → "`rai-plan.md` `## System Definition` section from Phase 1") so the doc is internally consistent with the updated Outputs. This is slightly beyond the strict scope of the issue but leaving Inputs stale would contradict the Outputs on the same page. * Phase 5 footer prose: reference the Control Surface Catalog, Evidence Register, and Tradeoffs sections instead of the standalone artifact names. * Bump `ms.date`. Verified against `.github/agents/rai-planning/rai-planner.agent.md` (Artifacts lines per phase) to make sure every section name and subsection matches the current output contract. ## Related Issue(s) Fixes microsoft#2569 ## Type of Change **Code & Documentation:** * [x] Documentation update ## Testing Verified section names against ground truth: * `.github/agents/rai-planning/rai-planner.agent.md` Artifacts lines for each phase (`## System Definition`, `## Stakeholder Impact`, `### Risk Classification Screening`, `## Standards Mapping`, `## Threat Addendum`, `## Control Surface Catalog`, `## Evidence Register`, `## Tradeoffs`, `## Review Summary`). * Grepped the file for the old standalone filenames and the pre-consolidation conceptual names to confirm none remain. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) ### Required Local Checks * [x] Spell checking: `npm run spell-check` * [x] Link validation: `npm run lint:md-links` ## Security Considerations * [x] This PR does not contain any sensitive or NDA information Co-authored-by: Jamie Kim <jamiekim500@gmail.com> Co-authored-by: Bill Berry <WilliamBerryiii@users.noreply.github.com>
…icrosoft#2619) # Pull Request ## Description Update `docs/planning/prds/brd-builder-agent-prd.md` and `docs/planning/prds/prd-builder-agent-prd.md` to remove stale references to the old collection-based packaging architecture (removed in microsoft#2577). Both PRDs now describe the current model where `.github/plugin/marketplace.json` is the sole package recipe authority. Changes in each PRD: * Frontmatter: replace "project-planning collection" with "project-planning package" and bump `ms.date`. * Product Context: replace "bundled into collections" with "defined through marketplace package recipes". * External constraints: replace "collection/plugin/extension regeneration" with "marketplace recipe, plugin, and extension regeneration". * `CON-002`: replace `collections/*.collection.yml`/`.md` with the `.github/plugin/marketplace.json` recipe and name the current scripts (`plugin:generate`, `extension:prepare`, validated by `plugin:validate`). * Risk item: replace "collection/plugin/extension outputs drift" with "marketplace recipe, plugin, and extension outputs drift". * brd-builder only: stakeholder row "Owns collections, plugins, extension packaging" becomes "Owns marketplace recipes, plugins, extension packaging". No remaining `collection` references exist in either file. ## Related Issue(s) Fixes microsoft#2604 ## Type of Change **Code & Documentation:** * [x] Documentation update ## Testing * Verified no `collection` references remain in either PRD via grep. * Confirmed replacement terminology matches the current architecture documented in `docs/customization/packages.md` and `.github/plugin/marketplace.json`. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) ## Security Considerations * [x] This PR does not contain any sensitive or NDA information --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jamie Kim <jamiekim500@gmail.com> Co-authored-by: Emmeline Hoops <108825895+chaosdinosaur@users.noreply.github.com>
…consolidation (microsoft#2588) # Pull Request ## Description Refresh the RAI Planner agent overview to reflect the skill consolidation completed in microsoft#2062, and add the RAI reviewer agent and skill-assessor subagent introduced alongside that change. Specific updates in `docs/agents/rai-planning/agent-overview.md`: * Operational Constraints: NIST AI RMF 1.0 standards are now referenced from the `rai-standards` skill, not an instruction file. * Related Files: describe the remaining instruction files accurately (identity and licensing) rather than "phase-specific", and add rows for `.github/agents/rai-planning/rai-reviewer.agent.md` and `.github/agents/rai-planning/subagents/rai-skill-assessor.agent.md`. * Bump `ms.date`. Note: the issue described `rai-skill-assessor.agent.md` as sitting at the top level of the collection; it actually lives under `subagents/`. The Related Files table uses the accurate path. ## Related Issue(s) Fixes microsoft#2079 ## Type of Change **Code & Documentation:** * [x] Documentation update ## Testing Verified all three documented locations against the current tree: * `.github/skills/rai/rai-standards/` exists (skill consolidation confirmed). * `.github/instructions/rai-planning/` contains only `rai-identity.instructions.md` and `rai-license-posture.instructions.md`. * `.github/agents/rai-planning/` contains `rai-planner.agent.md`, `rai-reviewer.agent.md`, and `subagents/rai-skill-assessor.agent.md`. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) ### Required Local Checks * [x] Spell checking: `npm run spell-check` * [x] Link validation: `npm run lint:md-links` ## Security Considerations * [x] This PR does not contain any sensitive or NDA information --------- Co-authored-by: Bill Berry <WilliamBerryiii@users.noreply.github.com> Co-authored-by: Jamie Kim <jamiekim500@gmail.com> Co-authored-by: Jamie Kim <jkim121@uw.edu>
…icrosoft#2656) <!-- markdownlint-disable-file --> <!-- PR title: docs(planning): remove stale collection references from planner PRDs --> # Pull Request ## Description Updated the requirements-author and Privacy Planner PRDs to reflect the current package architecture. The documents now identify `.github/plugin/marketplace.json` as the recipe authority and use the current marketplace recipe, plugin, and extension terminology. The changes also name the current generation and validation commands where the requirements-author PRD defines packaging consistency. Privacy lifecycle references to data collection remain unchanged because they describe personal-data processing rather than package distribution. ## Related Issue(s) Fixes microsoft#2605 ## Type of Change Select all that apply: **Code & Documentation:** * [ ] Bug fix (non-breaking change fixing an issue) * [ ] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot agent (`.github/agents/*.agent.md`) * [ ] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Contributions **MUST** target models listed in the model catalog (`scripts/linting/model-catalog.json`) whose provider appears in `providerAllowlist` and whose status is `ga` or `preview`. Run `npm run lint:models` to validate references. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [ ] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Sample Prompts (for AI Artifact Contributions) <!-- If you checked any boxes under "AI Artifacts" above, provide a sample prompt showing how to use your contribution --> <!-- Delete this section if not applicable --> **User Request:** <!-- What natural language request would trigger this agent/prompt/instruction? --> **Execution Flow:** <!-- Step-by-step: what happens when invoked? Include tool usage, decision points --> **Output Artifacts:** <!-- What files/content are created? Show first 10-20 lines as preview --> **Success Indicators:** <!-- How does user know it worked correctly? What validation should they perform? --> For detailed contribution requirements, see: * Common Standards: [docs/contributing/ai-artifacts-common.md](../docs/contributing/ai-artifacts-common.md) - Shared standards for XML blocks, markdown quality, RFC 2119, validation, and testing * Agents: [docs/contributing/custom-agents.md](../docs/contributing/custom-agents.md) - Agent configurations with tools and behavior patterns * Prompts: [docs/contributing/prompts.md](../docs/contributing/prompts.md) - Workflow-specific guidance with template variables * Instructions: [docs/contributing/instructions.md](../docs/contributing/instructions.md) - Technology-specific standards with glob patterns * Skills: [docs/contributing/skills.md](../docs/contributing/skills.md) - Task execution utilities with cross-platform scripts ## Testing * Confirmed `git diff --check` passes. * Confirmed obsolete collection-packaging phrases no longer appear in the affected PRDs. * Confirmed the changed frontmatter dates and Markdown table column alignment. * Manual testing was not applicable to this documentation-only change. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [ ] Tests added for new functionality (N/A - documentation-only change) ### AI Artifact Contributions <!-- If contributing an agent, prompt, instruction, or skill, complete these checks --> * [ ] Used `hve-builder` review mode to review contribution * [ ] Addressed all actionable findings from the `hve-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Local Checks The following local-safe validation commands must pass before merging: * [ ] Local validation aggregate: `npm run validate:local` * [ ] Documentation validation (if docs changed): `npm run validate:docs` * [ ] Spell checking: `npm run spell-check` * [ ] Link validation: `npm run lint:md-links` ## Security Considerations <!--⚠️ WARNING: Do not commit sensitive information such as API keys, passwords, or personal data --> * [x] This PR does not contain any sensitive or NDA information * [ ] Any new dependencies have been reviewed for security issues (N/A - no dependency changes) * [ ] Security-related scripts follow the principle of least privilege (N/A - no security script changes) ## Additional Notes No runtime behavior changed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Bill Berry <WilliamBerryiii@users.noreply.github.com> Co-authored-by: Jamie Kim <jamiekim500@gmail.com>
…2599) # Pull Request ## Description Skills and instructions referenced sibling artifacts by relative filesystem path — for example `../../../prompts/accessibility/accessibility-coverage-matrix.prompt.md` and `../../../../docs/agents/mural/credentials.md`. Those paths only resolve when the referenced artifact happens to be installed alongside the referring one. A user who installs a single package, or consumes artifacts through extension or plugin packaging, gets a reference pointing at nothing, and the failure is silent. This PR establishes a portability rule in `hve-builder.instructions.md` and applies it across the affected artifacts. A cross-artifact reference now names the target artifact and the section wanted, and states what happens when the target is unavailable. Relative paths within a skill to its own `references/` and `scripts/` are correct and unchanged. Two skills also exceeded a reasonable single-file size and are split into references in the same pass, since the split is what makes their cross-references nameable rather than positional. ## Related Issue(s) Fixes microsoft#2598 ## Type of Change Select all that apply: **Code & Documentation:** * [x] Bug fix (non-breaking change fixing an issue) * [x] New feature (non-breaking change adding functionality) * [x] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [x] Reviewed contribution with `hve-builder` and addressed all actionable findings * [x] Copilot instructions (`.github/instructions/*.instructions.md`) * [x] Copilot prompt (`.github/prompts/*.prompt.md`) * [x] Copilot agent (`.github/agents/*.agent.md`) * [x] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) **Other:** * [ ] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Changes ### Portability rule | File | Change | |------|--------| | `.github/instructions/hve-core/hve-builder.instructions.md` | Adds the cross-artifact reference rule and a `Handling an Unavailable Reference` section defining availability by an observable condition: an artifact is available only when its content is actually present in the current turn | The rule is stated in terms the agent can check. It does not assert that a host exposes a search-installed-artifacts-by-name capability, because none is documented. ### Reference conversions | File | Change | |------|--------| | `.github/instructions/skill-security-model.instructions.md` | Names the `mural`, `jira`, and `gitlab` skills and defers their location to the registry in `docs/security/security-model.md` | | `.github/skills/accessibility/accessibility/SKILL.md` | Names the `accessibility-coverage-matrix.prompt.md` prompt by filename, since it carries no `name:` field, and the `Accessibility Surface Inventory` subagent by name | | `.github/skills/accessibility/accessibility/references/frameworks/wcag-22.md` | Named reference | | `.github/skills/accessibility/accessibility/references/frameworks/coga.md` | Named reference | | `.github/skills/accessibility/accessibility/references/frameworks/en-301-549.md` | Named reference | | `.github/skills/coding-standards/code-review/references/emission-modes.md` | Named reference | | `.github/skills/coding-standards/code-review/references/output-formats.md` | Named reference | | `.github/skills/design-thinking/dt-coaching-foundation/references/canonical-deck.md` | Named reference | | `.github/skills/experimental/customer-card-render/SKILL.md` | Activates the `powerpoint` skill by name at all three sites that previously hard-coded its directory | | `.github/skills/experimental/customer-card-render/SECURITY.md` | Named reference | | `.github/skills/experimental/mural/SKILL.md` | Credentials guide and LICENSE referenced by location description rather than relative path | | `.github/skills/project-planning/rai-planner/references/security-model.md` | Named reference | | `.github/skills/security/vex/SECURITY.md` | Names `skill-security-model.instructions.md` | | `.github/skills/shared/backlog-templates/SKILL.md` | Normalizes `compatibility` to a string and states the consuming planner supplies tracker access | ### Size splits Measured against `origin/main`: | File | Before | After | |------|--------|-------| | `.github/skills/installer/hve-core-installer/SKILL.md` | 988 lines | 491 lines | | `.github/skills/experimental/powerpoint/SKILL.md` | 412 lines | 260 lines | New reference files: * `installer/references/installation-methods.md` * `installer/references/post-installation-setup.md` * `installer/references/component-installation.md` * `powerpoint/references/script-reference.md` The installer split is **not** a pure relocation. `main` landed a Phase 7 rewrite during this branch's life — "Agent Customization" became "Component Installation", `agent-copy` scripts became `component-copy`, the tracking manifest moved to `schemaVersion` 2, and eject became component-level. `references/component-installation.md` is built from that rewritten content, so the extracted file differs from anything that existed at the branch point. Reviewers should read it as new prose, not as moved prose. ### Behavior fixes found while reviewing the split | File | Fix | |------|-----| | `installer/SKILL.md` | Ten reference-relative script links were broken by the extraction (`scripts/` needed to become `../scripts/`) | | `installer/SKILL.md` | Restored the MCP capability table, the `/jira-setup` note, and six settings entries dropped during extraction | | `installer/SKILL.md` | Phase 6 and Phase 7 pointers were bare declaratives over phases that write into a user repository; both now direct the agent to read the reference, follow it, and stop when it is unavailable | | `installer/references/component-installation.md` | Adds an Upgrade Confirmation Gate. Upgrade mode previously displayed a summary and proceeded, so a `modified` or `ejected` file could be overwritten without a per-file decision | ## Review remediation (commit 6ff085c) All twelve review threads from @katriendg are addressed in `6ff085c`, with a per-thread reply naming the specific fix. | Change | Sites | |--------|-------| | Unavailable-reference prose added | 11 | | Sites the review missed, also fixed | 2 (`aria-apg.md` repo-root path, `mural/SKILL.md` trailing newline) | | `ms.date` refreshed | 4 | | `metadata.last_updated` refreshed | 6 | Two changes deserve explicit call-outs. **The LICENSE suggestion was declined.** Restoring `[LICENSE](../../../../LICENSE)` would reintroduce a skill-root-escaping path, which is the pattern this PR removes. No skill in the repo links LICENSE. The prose now falls back to the `license: MIT` frontmatter field, which is portable. Rationale is on the thread. **`<powerpoint-skill-dir>` is gone.** Step 2 of `customer-card-render/SKILL.md` now delegates the build to the `powerpoint` skill by name with three named inputs, instead of invoking a script at a path it never explained how to resolve. This also removes a contradiction: the skill's Overview already stated that `Invoke-PptxPipeline.ps1` "is not reimplemented here" while the code fence invoked it directly. ### Known scope boundary: mixed reference conventions in two SECURITY.md files `vex/SECURITY.md` and `customer-card-render/SECURITY.md` each now contain both a converted bare-name reference and an unconverted repo-root-relative link. In `customer-card-render` the two sit on adjacent lines of the same References list. This is deliberate. `skill-security-model.instructions.md` mandates the "See also: repo-wide STRIDE model" callout linking `docs/security/security-model.md`, and 34 of the 68 skill-root-escaping links in the repository exist to satisfy that requirement across 11 SECURITY.md files. Removing them requires changing that instruction first, which is a rule-design decision spanning files this PR does not touch. Tracked in microsoft#2646. ### Follow-ups filed | Issue | Scope | |-------|-------| | microsoft#2646 | SECURITY.md convention conflicts with the portability rule (34 instances, 11 files) | | microsoft#2647 | No CI lane validates reference content under the four ignored artifact globs | | microsoft#2648 | `metadata.last_updated` has no freshness validator | | microsoft#2649 | `hve-builder.instructions.md` ships with 2 of 7 packages containing affected skills | | microsoft#2650 | `nvd.nist.gov` needs a link-check ignore pattern | microsoft#2649 is the one worth reading: the rule this PR establishes ships with only two of the seven packages containing the affected skills, which is why the per-site prose is functionally required rather than redundant. ## Testing Validation lanes owning the changed areas, all passing on the current head: | Command | Result | |---------|--------| | `npm run validate:skills` | 0 errors, 0 warnings | | `npm run lint:frontmatter` | 0 errors | | `npm run lint:md` | 518 files, 0 issues | | `npm run lint:tables` | Pass | | `npm run plugin:validate` | Pass, marketplace validated, 14 plugins | | `npm run lint:json` | Pass | | `npm run lint:ai-artifacts` | Pass | CI run `31066517582` (PR Validation) completed with conclusion `success`. Note on link-check signal strength: `pr-validation.yml` sets `soft-fail: true` on the markdown link check, and `markdown-link-check.yml` reports success regardless of findings. A green check on that lane carries no information. The ten broken installer links fixed here would have passed CI untouched; they were caught by manual resolution of every relative link in the diff. Note on `lint:md` coverage: `.markdownlint-cli2.jsonc` ignores `.github/instructions/**`, `.github/agents/**`, `.github/prompts/**`, and `.github/skills/**`. Every file in this PR lives under one of those globs, so `lint:md` reports zero issues without inspecting any of them. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [ ] Tests added for new functionality (if applicable) — not applicable; this PR changes documentation only and adds no executable behavior ### AI Artifact Contributions * [x] Used `hve-builder` review mode to review contribution * [x] Addressed all actionable findings from the `hve-builder` review * [x] Verified contribution follows common standards and type-specific requirements ### Required Local Checks * [x] Local validation aggregate: `npm run validate:local` * [x] Documentation validation (if docs changed): `npm run validate:docs` * [x] Spell checking: `npm run spell-check` * [x] Link validation: `npm run lint:md-links` ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues * [x] Security-related scripts follow the principle of least privilege ## Additional Notes **Review state.** An `hve-builder` static review was run across four lanes and its High findings on phase-pointer imperativeness, the missing upgrade confirmation gate, and the two remaining path-resolved references are fixed in this branch. The behavior gate was **not** run — `hve-builder-tester` dispatch was unavailable in the authoring host. The `hve-builder` checkboxes above are checked to reflect that the static review ran and its actionable findings were addressed; the behavior gate remains outstanding and is tracked as follow-up. Rerun it when tester dispatch is available. **Known open findings, deliberately not fixed here.** Medium and Low findings remain on Phase 7 naming consistency, `builder`/`builder-tester` versus `hve-builder`/`hve-builder-tester` naming, missing Stop rules in two skills, and missing `Use when` triggers. These are follow-up work. Items from the original list that are now resolved in this branch: failure behavior at the previously-absent reference sites, the `mural/SKILL.md` reference wording, trailing-blank-line hygiene, and `metadata.last_updated` currency across every edited skill file. **Not implemented.** No validator enforces the portability rule. A `lint:skill-path-scope` check was designed during this work but not built, so the rule is currently convention-only and will drift. A `vally-tests` eval spec covering the unavailable-reference behavior is likewise outstanding. Both are worth filing before this rule accumulates more dependents. **Relationship to the topology PR.** This branch has merged current `origin/main` and is mergeable. The parallel collection-topology-consolidation PR (microsoft#2602) is still open and has **not** merged, so the two do stack: both touch `hve-core-installer/SKILL.md`. Whichever merges second will need a regeneration pass rather than a hand merge of generated files. **Reviewable decision.** The substance to review is the rule in `hve-builder.instructions.md` — whether a cross-artifact reference should name its target and state failure behavior, and whether "available only when content is present in the current turn" is the right availability test. The line-count of the installer split is large but secondary.
microsoft#2593 (microsoft#2659) Reverts only the `.github/dependabot.yml` change from merged PR microsoft#2593 (`Pin GitHub Actions to full-length commit SHAs`), restoring the file to its state at `db450a8e`. GitHub Actions SHA pins and all other files are untouched. ## The added block was invalid YAML PR microsoft#2593 appended a second `github-actions` entry *after* the top-level `version: 2` key, outside the `updates:` sequence: ```yaml version: 2 - package-ecosystem: "github-actions" directory: "/" groups: github-actions: patterns: ["*"] schedule: interval: "weekly" cooldown: default-days: 7 ``` Parsing the pre-revert file with `powershell-yaml` fails: `While scanning a plain scalar value, found invalid mapping.` Since Dependabot could not parse this file, the config was likely inert from the moment microsoft#2593 merged — this revert plausibly restores Dependabot rather than only dropping a cooldown. Worth confirming against Dependabot run history. ## Changes - **`.github/dependabot.yml`** — removed the 9 appended lines; file restored byte-for-byte to the parent of microsoft#2593. ## Notes - The block was duplicative regardless of syntax: an existing `github-actions` entry already defines grouping and `gh-aw-actions` exclusions. - No `scripts/` reference `dependabot.yml`, so there is no existing test infrastructure for it; validated by parser round-trip (`version: 2`, 3 entries, no `cooldown`) rather than adding new tooling. - The automated `code_review` tool errored with `prompt too big after adding system message` — an infra limit, unrelated to this diff. This change has not had an automated review pass, so a human eye is worth having here. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jkim323 <46459431+jkim323@users.noreply.github.com> Co-authored-by: Jamie Kim <jamiekim500@gmail.com>
…ugin sourcing (microsoft#2618) ## Description This branch replaced the snapshot-based plugin distribution model and the single-branch release flow with a reviewed two-hop release ladder, and it retired the projected `plugins/` tree as a source of truth. Releases now walk `main` to `release/prerelease` to `release/stable`, each hop gated by a human-merged promotion PR and a release-please managed PR. Along the way the marketplace catalog moved to canonical `.github`-root-relative component paths, plugin generation moved out of the repository entirely, and VS Code Marketplace publication was split into privilege-tiered jobs. > Every release identity is now decided before a tag exists. The promotion workflow computes the version deterministically, proves the candidate tag and release are unoccupied, and records the intent in a digest-backed candidate record that later stages replay rather than recompute. ### Release channel ladder The old model published pre-releases on demand from an operator-supplied commit SHA and pushed orphan `plugins-v<version>` snapshot commits. That model is gone. - Added **release-prerelease-prepare.yml**, which runs on every merge to `main` and prepares the `main` to `release/prerelease` promotion PR. It resolves the next odd-minor version, probes the candidate tag and GitHub release identity fail-closed (only an HTTP 404 counts as available), refreshes the promotion head without force-push, restores target-owned release files, writes the candidate record, and sets `release-as`. Auto-merge is deliberately not enabled. - Rewrote **release-prerelease.yml** to trigger on `pull_request[closed]` against *release/prerelease* instead of `workflow_dispatch`. Release-please now runs PR-only when the promotion head merges and tag-only when the managed release head merges. The removed `resolve-source`, `create-prerelease`, and `plugin-snapshot-production` jobs were replaced by `sync-release-pr` and `validate-release`. - Rewrote **release-stable.yml** from a push-to-`main` validation workflow into a two-job promotion preparer triggered by a published PreRelease release. It validates the source tag is a published non-draft PreRelease, verifies the canonical plugin evidence document, and confirms the source commit is contained in *release/prerelease*. Promotion heads are tag-scoped, so two promotions from different source tags can never share a branch. - Extended **release-stable-publish.yml** with a `validate-trigger` job that classifies the merged head as `promotion` or `managed`, published-asset verification, a cross-channel package-set consistency check, and candidate record verification. The `open-main-sync-pr` job was removed; `main` is now a ref-less development tip with no post-release catalog sync. - Extended **pr-validation.yml** to accept the two release branches as PR targets and to enforce two new gates: Stable promotion branch grammar with baseline advancement, and managed-release-head reproduction of its retained candidate record. - Tag namespaces changed. `hve-core-v*` and `plugins-v*` are historical; PreRelease publishes `prerelease-v<version>` on odd minors and Stable publishes `v<version>` on even minors, backed by a new *release-please-prerelease-config.json* and *.release-please-prerelease-manifest.json* seeded at `3.3.101`. ### Deterministic versioning and the candidate record - Added **Resolve-ReleasePromotionVersion.ps1**, a pure computation with no repository or network access. PreRelease advances the minor by two; Stable advances the promoted odd minor by one and refuses to regress against the current Stable baseline. - Reworked **Update-VersionFiles.ps1** around a required `-Channel` parameter and a `-CandidateAction` lifecycle. *Record* captures SHA-256 digests of the immutable source catalog and its deterministic transform without touching the committed catalog, *Apply* replays and rebuilds from the retained record, and *Verify* reads committed state only and writes nothing. - Digests are taken over compressed UTF-8 no-BOM bytes, so producer and verifier compare byte-for-byte rather than structurally. The reserved `OMITTED` locator represents the ref-less bootstrap catalog before the first channel tag exists. ### Canonical marketplace component paths - Migrated **marketplace.json** membership from package form (`agents/*.md`, `commands/*`, `rules/*`) to canonical `.github`-root-relative form (`agents/*.agent.md`, `prompts/*.prompt.md`, `instructions/*.instructions.md`) across all thirteen packages, including `componentMaturity` keys and starter profiles. Each `source` is now `{ path: ".github" }` with no `ref`, and `pluginRoot` was dropped from metadata. - Taught **MarketplaceHelpers.psm1** the two-level identity model: `Get-MarketplaceComponentSourceRoot` gained a `CatalogRoot` field, `Resolve-MarketplaceComponentSource` accepts either form and returns `CatalogPath`, and `Test-MarketplaceEntryContract` gained a `-CanonicalMembership` switch that enforces strict canonical form. - Updated **Validate-Marketplace.ps1** and the manifest schema so `ref` is optional and channel-namespaced, and added catalog-wide uniformity checks that reject a catalog mixing ref presence or channel namespaces across entries. - Added path projection to both installer scripts (`ConvertTo-PackageComponentPath` in PowerShell, `to_package_component_path` in Bash) so the installer keeps writing package-form manifests while reading canonical catalog identities. ### Plugin snapshot retirement - Deleted **plugin-snapshot-publish.yml** in full. Its evidence and verification responsibilities moved into *plugin-package.yml* and *pr-validation.yml*. - Rewrote **Assert-PluginReleaseEvidence.ps1** from generated-tree digesting to canonical git-tracked source digesting. Evidence is now reproducible from a clean checkout of the tagged commit with no staging directory, and the document schema advanced to `hve-core/plugin-release-evidence/v2` with a pathless locator. Untracked working-tree files cannot enter a digest. - Added a `publish-evidence` job to **plugin-package.yml** that records evidence, verifies it reproduces, attests it, and uploads it as a release asset. - Made the external staging root mandatory. **Generate-Plugins.ps1** lost `-ReleaseTag` and `-MarketplaceOutputPath`, gained `-StagingRoot`, and now resolves output through the new `Assert-PluginStagingRoot`, which rejects any path equal to, inside, or containing the repository root. ### Marketplace publication privilege separation > The single `publish` job previously held `id-token: write`, ran tag-sourced helper scripts, and installed its toolchain in the same context. Those responsibilities are now separated. - Split **extension-marketplace-publish.yml** into `validate-inputs`, `verify`, `collect`, `prepare-publisher`, and `publish`. Only `publish` holds `id-token: write` and the `marketplace` environment, and it consumes nothing but immutable artifacts. - `validate-inputs` runs with `contents: read` and no checkout; it validates the caller-supplied matrix structurally, enforces tag namespace and minor-parity channel pairing, and resolves both the release digest and the protected-main publisher digest through the API. - `collect` builds the publication matrix from same-attempt artifacts only, using a sentinel artifact so a zero-success verify matrix fails deterministically instead of silently producing an empty publish set. - `prepare-publisher` builds the pinned toolchain from protected `main` in an unprivileged context and archives it, so the privileged job never runs `npm` or tag-sourced code. - Replaced the optional `verify-attestation` boolean with a required `attestation-signer-workflow` string, making callers declare which workflow attested the release. **extension-provenance.yml** now requires `source-ref` to be a full 40-character SHA equal to `github.sha`. - Added **scripts/extension/marketplace-publisher/** with a private manifest pinning `@vscode/vsce@3.9.2`, its lockfile, and an *.npmrc* that fixes the canonical public registry, exact saves, `audit-level=moderate`, and `ignore-scripts=true`. Dependabot now tracks that directory. ### Hooks, tests, and documentation - Changed every command in **telemetry.json** from a hardcoded `.github/` prefix to `${CLAUDE_PLUGIN_ROOT:-.github}` in bash and the PowerShell null-coalescing equivalent, so one manifest resolves from both a repository checkout and an installed plugin. The materializer strips the fallback for the installed form. - Rebuilt **Workflow-PackagingContracts.Tests.ps1** around the five-job publish model and the two-PR promotion model, asserting job permission sets, needs closure, artifact naming, and step ordering. Forbidden patterns in the privileged job are enumerated and asserted to be absent, making the privilege boundary a testable contract. - Expanded **Update-VersionFiles.Tests.ps1** with candidate digest semantics, fail-closed tamper scenarios, and managed-head verification that proves nothing is written. Added **Resolve-ReleasePromotionVersion.Tests.ps1** and rewrote the plugin evidence, generation, locator, and marketplace validation suites for canonical paths and channel locators. - Rewrote the release, architecture, security, and getting-started documentation for the branch ladder, per-channel attestation topology, canonical evidence verification, and the three registration options: ref-less `main`, moving channel branches, and immutable exact tags. ## Related Issue(s) None ## Type of Change Select all that apply: **Code & Documentation:** * [x] Bug fix (non-breaking change fixing an issue) * [x] New feature (non-breaking change adding functionality) * [x] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [x] GitHub Actions workflow * [x] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration (N/A — no `scripts/security/` changes) * [ ] DevContainer configuration (N/A — no `.devcontainer/` changes) * [x] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot agent (`.github/agents/*.agent.md`) * [x] Copilot skill (`.github/skills/*/SKILL.md`) * [x] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Contributions **MUST** target models listed in the model catalog (`scripts/linting/model-catalog.json`) whose provider appears in `providerAllowlist` and whose status is `ga` or `preview`. Run `npm run lint:models` to validate references. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [x] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Sample Prompts (for AI Artifact Contributions) **User Request:** "Install the hve-core RPI package into this repository using the starter profile." **Execution Flow:** 1. The `hve-core-installer` skill loads `.github/plugin/marketplace.json` and builds a component index. 2. For a custom selection, the skill now calls `Get-MarketplaceComponentIndex` and `Resolve-MarketplaceComponentSelection` rather than passing raw catalog entry values into collision detection. 3. `component-copy.ps1` or `component-copy.sh` projects each canonical catalog identity (`agents/rpi/rpi-planner.agent.md`) into the installer package form (`agents/rpi/rpi-planner.md`) through `ConvertTo-PackageComponentPath` or `to_package_component_path`. Entries outside the four installable roots pass through unprojected, so hook and metadata fields never fail catalog load. 4. Membership validation, maturity lookup, and manifest filtering all operate on the projected package form. 5. Installed hooks resolve their command paths through `${CLAUDE_PLUGIN_ROOT:-.github}`, so the same `telemetry.json` works from a repository checkout and from an installed plugin root. **Output Artifacts:** The installer writes its component manifest with package-form paths, for example: ```text agents/rpi/rpi-planner.md prompts/rpi/rpi-plan.md instructions/shared/hve-core-location.instructions.md skills/rpi/rpi-research/ ``` **Success Indicators:** The written manifest component list matches the resolved starter closure exactly, and the Bash and PowerShell paths produce identical selections. A new Bash parity test in `component-copy.Tests.ps1` runs the starter profile against the live catalog and asserts that equivalence. > [!NOTE] > Human review is recommended for the agent-populated content in this section. For detailed contribution requirements, see: * Common Standards: [docs/contributing/ai-artifacts-common.md](../docs/contributing/ai-artifacts-common.md) - Shared standards for XML blocks, markdown quality, RFC 2119, validation, and testing * Agents: [docs/contributing/custom-agents.md](../docs/contributing/custom-agents.md) - Agent configurations with tools and behavior patterns * Prompts: [docs/contributing/prompts.md](../docs/contributing/prompts.md) - Workflow-specific guidance with template variables * Instructions: [docs/contributing/instructions.md](../docs/contributing/instructions.md) - Technology-specific standards with glob patterns * Skills: [docs/contributing/skills.md](../docs/contributing/skills.md) - Task execution utilities with cross-platform scripts ## Testing Automated validation was intentionally deferred at the author's request and will be run after this PR is opened. No local validation commands were executed during PR generation, so every entry under Required Local Checks is left unchecked. Diff-based assessment performed during generation: * Reviewed all 50 diff chunks across 78 files through parallel review lanes and reconciled the findings into a single analysis log. * Confirmed no secrets, tokens, or credentials appear in the diff. The new *.npmrc* contains registry and audit settings only. * Confirmed the new dependency surface is a single pinned package, `@vscode/vsce@3.9.2`, with a committed lockfile and `ignore-scripts=true` by default. * Confirmed permission changes are reductions: `id-token: write` and the `marketplace` environment are now confined to one job that imports no tag-sourced scripts. * Confirmed test coverage accompanies the behavioral changes, including new suites for promotion version resolution, staging root validation, and candidate record semantics. Test suites were extended rather than merely updated. New coverage includes fail-closed candidate tamper scenarios, staging root rejection cases, canonical evidence digest stability, and workflow privilege boundary assertions. > [!NOTE] > Manual testing was not performed as part of PR generation. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [ ] Changes are backwards compatible (if applicable) * [x] Tests added for new functionality (if applicable) ### AI Artifact Contributions <!-- If contributing an agent, prompt, instruction, or skill, complete these checks --> * [ ] Used `hve-builder` review mode to review contribution * [ ] Addressed all actionable findings from the `hve-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Local Checks The following local-safe validation commands must pass before merging: * [ ] Local validation aggregate: `npm run validate:local` * [ ] Documentation validation (if docs changed): `npm run validate:docs` * [ ] Spell checking: `npm run spell-check` * [ ] Link validation: `npm run lint:md-links` ## Security Considerations <!--⚠️ WARNING: Do not commit sensitive information such as API keys, passwords, or personal data --> * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues * [ ] Security-related scripts follow the principle of least privilege (N/A — no `scripts/security/` changes; workflow privilege scoping is described above) ## GHCP Artifact Maturity | File | Type | Maturity | Notes | |-----------------------------------------------|-------|-----------------|------------------| | `.github/skills/installer/hve-core-installer` | Skill | ✅ stable | All builds | | `.github/hooks/shared/telemetry.json` | Hook |⚠️ experimental | Pre-release only | ### GHCP Maturity Acknowledgment * [ ] I acknowledge this PR includes non-stable GHCP artifacts * [ ] Non-stable artifacts are intentional for this change ## Additional Notes Breaking changes are intentional and are the point of the branch: * `plugin-snapshot-publish.yml` was deleted, and the `plugins-v<version>` and `hve-core-v<version>` tag namespaces are now historical only. Existing marketplace registrations pinned to a `plugins-v*` ref continue to resolve against the historical tag but will not receive new releases. * `Generate-Plugins.ps1` requires `-StagingRoot` or `HVE_PLUGIN_STAGING_ROOT` and refuses any path inside the repository. A repository-root `plugins/` directory is no longer a valid output location. * `New-MarketplaceManifestContent`, `Write-MarketplaceManifest`, `Test-PluginGitRefName`, and `Assert-PluginSnapshotTarget` were removed from `PluginHelpers.psm1`. `New-PluginReleaseLocator` now requires `-Channel` and no longer returns `PathPrefix`. * `Update-VersionFiles.ps1` requires `-Channel`, and `Assert-PluginReleaseEvidence.ps1` replaced `-PluginsDir` with `-CatalogPath` and `-Channel`. The evidence schema advanced to v2 and its locator no longer carries a `path` field, so v1 documents will not compare cleanly. * `extension-marketplace-publish.yml` made `tag` required and replaced the `verify-attestation` boolean with a required `attestation-signer-workflow` input. Follow-up worth tracking separately: * `prebuild-install@7.1.3` reaches the dependency graph only through the optional `keytar` path used by `@vscode/vsce`, and it carries an upstream deprecation notice. It does not block installation but will appear in audit output. * `open-main-sync-pr` was removed without a replacement. `main` is documented as a ref-less development tip, so confirm no downstream tooling still expects a post-release catalog sync PR.
…deration in the version-updates group across 1 directory (microsoft#2670) Bumps the version-updates group with 1 update in the /scripts/evals/moderation directory: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.16.1 to 0.16.2 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ruff/releases">ruff's releases</a>.</em></p> <blockquote> <h2>0.16.2</h2> <h2>Release Notes</h2> <p>Released on 2026-08-06.</p> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-pyi</code>] Avoid false positives on <code>singledispatch</code> functions (<code>PYI041</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/27335">#27335</a>)</li> </ul> <h3>Server</h3> <ul> <li>Register formatting capabilities dynamically to exclude TOML files (<a href="https://redirect.github.com/astral-sh/ruff/pull/27332">#27332</a>)</li> </ul> <h3>Contributors</h3> <ul> <li><a href="https://github.com/MeGaGiGaGon"><code>@MeGaGiGaGon</code></a></li> <li><a href="https://github.com/charliermarsh"><code>@charliermarsh</code></a></li> <li><a href="https://github.com/epage"><code>@epage</code></a></li> <li><a href="https://github.com/sharkdp"><code>@sharkdp</code></a></li> <li><a href="https://github.com/ntBre"><code>@ntBre</code></a></li> </ul> <h2>Install ruff 0.16.2</h2> <h3>Install prebuilt binaries via shell script</h3> <pre lang="sh"><code>curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.sh | sh </code></pre> <h3>Install prebuilt binaries via powershell script</h3> <pre lang="sh"><code>powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.ps1 | iex" </code></pre> <h2>Download ruff 0.16.2</h2> <table> <thead> <tr> <th>File</th> <th>Platform</th> <th>Checksum</th> </tr> </thead> <tbody> <tr> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-aarch64-apple-darwin.tar.gz">ruff-aarch64-apple-darwin.tar.gz</a></td> <td>Apple Silicon macOS</td> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-aarch64-apple-darwin.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-x86_64-apple-darwin.tar.gz">ruff-x86_64-apple-darwin.tar.gz</a></td> <td>Intel macOS</td> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-x86_64-apple-darwin.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-aarch64-pc-windows-msvc.zip">ruff-aarch64-pc-windows-msvc.zip</a></td> <td>ARM64 Windows</td> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-aarch64-pc-windows-msvc.zip.sha256">checksum</a></td> </tr> <tr> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-i686-pc-windows-msvc.zip">ruff-i686-pc-windows-msvc.zip</a></td> <td>x86 Windows</td> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-i686-pc-windows-msvc.zip.sha256">checksum</a></td> </tr> <tr> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-x86_64-pc-windows-msvc.zip">ruff-x86_64-pc-windows-msvc.zip</a></td> <td>x64 Windows</td> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-x86_64-pc-windows-msvc.zip.sha256">checksum</a></td> </tr> <tr> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-aarch64-unknown-linux-gnu.tar.gz">ruff-aarch64-unknown-linux-gnu.tar.gz</a></td> <td>ARM64 Linux</td> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-i686-unknown-linux-gnu.tar.gz">ruff-i686-unknown-linux-gnu.tar.gz</a></td> <td>x86 Linux</td> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-i686-unknown-linux-gnu.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-powerpc64-unknown-linux-gnu.tar.gz">ruff-powerpc64-unknown-linux-gnu.tar.gz</a></td> <td>PPC64 Linux</td> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-powerpc64le-unknown-linux-gnu.tar.gz">ruff-powerpc64le-unknown-linux-gnu.tar.gz</a></td> <td>PPC64LE Linux</td> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-riscv64gc-unknown-linux-gnu.tar.gz">ruff-riscv64gc-unknown-linux-gnu.tar.gz</a></td> <td>RISCV Linux</td> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256">checksum</a></td> </tr> <tr> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-s390x-unknown-linux-gnu.tar.gz">ruff-s390x-unknown-linux-gnu.tar.gz</a></td> <td>S390x Linux</td> <td><a href="https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-s390x-unknown-linux-gnu.tar.gz.sha256">checksum</a></td> </tr> </tbody> </table> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md">ruff's changelog</a>.</em></p> <blockquote> <h2>0.16.2</h2> <p>Released on 2026-08-06.</p> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-pyi</code>] Avoid false positives on <code>singledispatch</code> functions (<code>PYI041</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/27335">#27335</a>)</li> </ul> <h3>Server</h3> <ul> <li>Register formatting capabilities dynamically to exclude TOML files (<a href="https://redirect.github.com/astral-sh/ruff/pull/27332">#27332</a>)</li> </ul> <h3>Contributors</h3> <ul> <li><a href="https://github.com/MeGaGiGaGon"><code>@MeGaGiGaGon</code></a></li> <li><a href="https://github.com/charliermarsh"><code>@charliermarsh</code></a></li> <li><a href="https://github.com/epage"><code>@epage</code></a></li> <li><a href="https://github.com/sharkdp"><code>@sharkdp</code></a></li> <li><a href="https://github.com/ntBre"><code>@ntBre</code></a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/astral-sh/ruff/commit/5b48a040974781ba90b47c8df628f8fd9b6c95dd"><code>5b48a04</code></a> Bump 0.16.2 (<a href="https://redirect.github.com/astral-sh/ruff/issues/27555">#27555</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/1b9e5fc483b95a01fe02ff104820280b1b32e8ae"><code>1b9e5fc</code></a> Update Swatinem/rust-cache action to v2.9.2 (<a href="https://redirect.github.com/astral-sh/ruff/issues/27568">#27568</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/c4e86fc0394c92a9334ba2eb026c77c21db403be"><code>c4e86fc</code></a> [ty] Add helper extension methods for half-range and equality constraints (<a href="https://redirect.github.com/astral-sh/ruff/issues/2">#2</a>...</li> <li><a href="https://github.com/astral-sh/ruff/commit/17a00de2e298612201a8fe30790e9399204af1b9"><code>17a00de</code></a> [ty] Reuse primer commands in memory reports (<a href="https://redirect.github.com/astral-sh/ruff/issues/27553">#27553</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/6ea296b96923e142eb13af2bc6ad261c280d8eb1"><code>6ea296b</code></a> [ty] Normalize type labels in structured docstrings (<a href="https://redirect.github.com/astral-sh/ruff/issues/26923">#26923</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/2fc445f0053f4ec27c717fae0de3671d73c103be"><code>2fc445f</code></a> [ty] Diagnose invalid <strong>getattr</strong> calls (<a href="https://redirect.github.com/astral-sh/ruff/issues/27502">#27502</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/22c7823c4e8bffcca97688d8438c9b567d6817d8"><code>22c7823</code></a> [ty] Enable (but downrank) auto-import completion suggestions from stub-only ...</li> <li><a href="https://github.com/astral-sh/ruff/commit/05160d507f05345a72db9c28ab4edf7c92334819"><code>05160d5</code></a> [ty] Diagnose invalid descriptor <code>__get__</code> calls (<a href="https://redirect.github.com/astral-sh/ruff/issues/27400">#27400</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/baea3d0dcec6d6f6d1659321940f3725771c5f45"><code>baea3d0</code></a> [ty] Expose strict analysis options in the playground (<a href="https://redirect.github.com/astral-sh/ruff/issues/27543">#27543</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/c88946ebeb92be6d276087f0d528cd6471df4ead"><code>c88946e</code></a> [ty] Bump ecosystem-analyzer for strict project settings (<a href="https://redirect.github.com/astral-sh/ruff/issues/27542">#27542</a>)</li> <li>Additional commits viewable in <a href="https://github.com/astral-sh/ruff/compare/0.16.1...0.16.2">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
… project-planning (microsoft#2602) # Pull Request ## Description Azure DevOps, GitHub, and Jira each carried their own package, their own backlog manager agent, and near-duplicate copies of the same backlog protocol — discovery, triage, sprint planning, PRD-to-work-item planning, and execution. GitLab carried its own package and skill, but never a backlog manager agent. What actually differs between trackers is small: the command surface, the field vocabulary, the reference-ID prefix, and the action verbs. Everything structural was common and duplicated four ways. This PR consolidates backlog capability into `project-planning`. The shared protocol is owned by skills, and each platform contributes only its delta as a skill reference. A single `backlog-manager` agent resolves the target platform before dispatching, so a team using more than one tracker no longer has to pick a collection per tracker. ## Related Issue(s) Fixes microsoft#2601 ## Type of Change Select all that apply: **Code & Documentation:** * [ ] Bug fix (non-breaking change fixing an issue) * [ ] New feature (non-breaking change adding functionality) * [x] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [x] GitHub Actions workflow * [x] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [x] Copilot instructions (`.github/instructions/*.instructions.md`) * [x] Copilot prompt (`.github/prompts/*.prompt.md`) * [x] Copilot agent (`.github/agents/*.agent.md`) * [x] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [x] Eval spec added/updated for changed AI artifacts (`evals/`) **Other:** * [x] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Changes ### Read this first: the diff is mostly relocation The file count is large because four packages were dissolved and their contents relocated. Most changed paths are the same bytes at a new address. Ninety-eight files carry real edits. ```text 369 changed paths ┌────────────────────────────────────────────────────────────────────────────┐ │ relocated ████████████████████████████████████████████████ 119 32% │ skim │ retired █████████████████████████████████ 83 22% │ skim │ generated ████████████████████████████ 69 19% │ skip │ edited █████████████████████████ 61 17% │ REVIEW │ new ███████████████ 37 10% │ REVIEW └────────────────────────────────────────────────────────────────────────────┘ relocated = 103 byte-identical moves + 16 moved-and-edited paths generated = docs/reference/, owned entirely by npm run docs:generate retired = deletions whose capability is superseded, not lost ``` GitHub collapses each rename pair into one entry, so the PR view shows roughly 250 entries rather than 369 paths. ### Where things moved Paths below are relative to `.github/` unless they start with `docs/` or `evals/`. `SAME` counts pairs whose content is byte-identical across the move. ```text SOURCE (on main) DESTINATION (this branch) PAIRS SAME ----------------------------------------------------------------------------------------- skills/gitlab/gitlab/ ---> skills/project-planning/gitlab/ 54 53 skills/jira/jira/ ---> skills/project-planning/jira/ 47 45 skills/github/gh-code-scanning/ ---> skills/security/gh-code-scanning/ 5 5 prompts/ado/ado-{pr,build-info} ---> prompts/hve-core/ 2 0 instructions/ado/ado-{pr,build-info} ---> skills/**/backlog-mgmt/references/ 2 0 instructions/github/community-* ---> instructions/project-planning/ 1 0 evals/**/ado-backlog-manager.yml ---> evals/**/backlog-manager.yml 1 0 docs/reference/** (generated) ---> docs/reference/** (regenerated) 7 0 ----------------------------------------------------------------------------------------- TOTAL 119 103 ``` The two large blocks — 101 pairs across `gitlab` and `jira` — are Python skill packages moving intact: scripts, tests, fuzz corpora, and lockfiles. Only three files in those blocks differ, and each difference is a path string inside a `SKILL.md` or corpus `README.md`. ### What replaced the retired packages ```text RETIRED PACKAGES CONSOLIDATED INTO ─────────────────── ───────────────── ado ──┐ project-planning/ github ──┤ │ jira ──┼──────────────────────▶ ├─ agents/ backlog-manager (resolves platform) gitlab ──┘ │ functional-planner (PRD → hierarchy) │ subagents/ ado-backlog-executor 7 agents ──▶ 5 agents │ github-backlog-executor 18 prompts ──▶ 0 prompts │ jira-backlog-executor 18 instrs ──▶ 1 instruction │ ├─ skills/ backlog-management (shared protocol) │ backlog-plan (read-only) │ backlog-execute (mutating) │ functional-planner │ └─ skills/ gitlab/ jira/ (relocated intact) security/ └─ skills/ gh-code-scanning/ (relocated intact) hve-core/ └─ prompts/ ado-create-pull-request ado-get-build-info ``` Platform deltas that survive live as skill references under `backlog-management/references/{ado,github,jira}.md`, loaded on demand rather than through always-on `applyTo` globs. ### Packages Ten packages remain in `.github/plugin/marketplace.json`. `ado`, `github`, `jira`, and `gitlab` are retired and their capability folded into `project-planning`. | Change | Detail | |--------|--------| | Retired | `ado`, `github`, `jira`, `gitlab` catalog entries and their `docs/plugins/` pages | | Rewired | `marketplace.json` package recipes, `docs/plugins/project-planning.md`, `.vscode/settings.json` | The `.vscode/settings.json` change is broader than the four retired packages: it reconciles every artifact discovery location with the current directory topology, including accessibility, data-science, and privacy locations. No entry is retained for a directory that does not exist. ### New skills and agents | Artifact | Role | |----------|------| | `backlog-management` | Platform-agnostic core: planning-file lifecycle, planning-type enum, scope normalization, reference-ID scheme, similarity assessment, three-tier autonomy, content sanitization, resumable state | | `backlog-plan` | Read-only half: discovery, triage, sprint, my-work, task-plan | | `backlog-execute` | Mutating half: add, run | | `functional-planner` | PRD-to-hierarchy planning, no tracker mutation | | `backlog-manager` agent | Resolves platform, classifies workflow, dispatches | | `functional-planner` agent | PRD hierarchy planning | | `{ado,github,jira}-backlog-executor` subagents | Apply a dispatched operation set against one confirmed tracker | | `backlog-guardrails` instruction | Always-on mutation guardrail over backlog tracking roots | Per-platform deltas live in `backlog-management/references/{ado,github,jira}.md`. ### Retired artifacts | Kind | Deleted | Of which content relocated | Retired outright | |--------------|---------|-----------------------------|------------------| | Agents | 7 | 0 | 7 | | Prompts | 18 | 0 | 18 | | Instructions | 18 | 2 | 16 | Net totals: agents 64 to 62 (7 deleted, 5 added), prompts 67 to 49, instruction files 79 to 62 (18 deleted, 1 added). All 18 deleted instruction files carried an `applyTo` glob, and 14 of those attached to a backlog tracking root (`.copilot-tracking/workitems/**`, `github-issues/**`, or `jira-issues/**`); the remaining four attached elsewhere. Their content is now reached through skill references, so it loads on demand rather than against the always-on context budget. A new `backlog-guardrails.instructions.md` keeps mutation safety attached to those three roots for consumers that never load a backlog skill. Separately, `community-interaction.instructions.md` is relocated from `instructions/github/` to `instructions/project-planning/` and remains an instruction. ### Preserved ADO workflows Pull request creation and build information have no cross-platform equivalent and are preserved as skill references rather than retired: | From | To | |------|-----| | `instructions/hve-core/ado-create-pull-request.instructions.md` | `backlog-management/references/ado-pull-request.md` | | `instructions/hve-core/ado-get-build-info.instructions.md` | `backlog-management/references/ado-build-info.md` | ### Documentation `docs/agents/ado-backlog/` and `docs/agents/github-backlog/` are replaced by a unified `docs/agents/backlog/`. Azure DevOps pages with no cross-platform equivalent — build monitoring, PR creation, PRD planning — are retained under an `Azure DevOps Delivery Workflows` sidebar category and linked from the agents catalog. `docs/plugins/` package pages and Docusaurus configuration are updated. ### Other `.github/workflows/gh-code-scanning.yml` is corrected to `.github/skills/security/gh-code-scanning/`, following that skill's relocation. `scripts/evals/New-AgentSurfaceSignatures.ps1` emits an alternation covering every declared tracking root, which the multi-platform `backlog-manager` requires. Its call site is wrapped in `@()` so zero-scope and single-scope results stay arrays, and the Windows drive-letter disallow is unchanged from `main` because the relaxed form could be defeated by unrelated same-line text. ## Testing The validation suite ran once against the final tree. | Command | Result | |-----------------------------------------------------|---------------------------------------------------------------| | `npm run validate:local` | 24 of 25 lanes pass. See the note below on `lint:md-links` | | `npm run validate:docs` | Pass. Typecheck clean, 101 tests in 10 suites | | `npm run spell-check` | Pass. 0 issues in 805 files | | `npm run test:ps -- -TestPath scripts/tests/evals/` | Pass. 453 passed, 0 failed, 1 skipped | | `Build-AgentBehaviorSpec.ps1 -WhatIf` | Pass. No drift | | `npx vally lint --eval-spec evals/` | Pass. Pre-existing `regression-without-baseline` warnings only | | `npm run docs:generate:check` | Pass. Non-blocking `ms.date` drift only | Two lanes are unchecked above and both are stated rather than implied. `lint:md-links` was not run against the remediation tree; its two known local failures are external URLs returning `Status: 0`, a connection failure rather than a 404, in files this PR does not modify. `validate:local` is unchecked because it is a sequential aggregate whose `lint:md-links` stage would abort it; every other lane in it was run individually against the remediation tree and passes, including `lint:tables`, `lint:md`, `lint:ps`, `lint:yaml`, `lint:json`, `lint:frontmatter`, `lint:marketplace`, `lint:hooks`, `lint:permissions`, `lint:dangerous-workflow`, `lint:dependency-pinning`, `lint:pr-gate`, `lint:py`, `validate:skills`, `lint:ai-artifacts`, `lint:asset-docs`, and `lint:models`. CI re-checks the link lane from a runner with unrestricted egress. Acceptance criteria were independently re-verified rather than accepted from the implementation record: package count, absence of residual retired-package paths across `.github/` and `extension/`, `user-invocable` values on the five affected skills, story-quality levels, sprint-planning platform neutrality, and Docusaurus package coverage. ### Known limitations * Jira reads route through `Jira Backlog Executor` because Jira's only command surface is a CLI reached through a terminal. Azure DevOps and GitHub reads do not need that round trip. This is the accepted cost of keeping the orchestrator free of terminal access. * Azure DevOps exposes no tool that lists a project's process types, so work-item types are confirmed with the user and recorded as unvalidated rather than discovered. * GitHub exposes no milestone-list tool, so milestones with zero open issues are undiscoverable by the sprint workflow. * `docs/plugins/` sidebar positions are non-contiguous after the four package pages were deleted. Docusaurus tolerates gaps. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [ ] Changes are backwards compatible (if applicable) * [x] Tests added for new functionality (if applicable) ### AI Artifact Contributions * [x] Used `hve-builder` review mode to review contribution * [x] Addressed all actionable findings from the `hve-builder` review * [x] Verified contribution follows common standards and type-specific requirements ### Required Local Checks * [ ] Local validation aggregate: `npm run validate:local` * [x] Documentation validation (if docs changed): `npm run validate:docs` * [x] Spell checking: `npm run spell-check` * [ ] Link validation: `npm run lint:md-links` ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues * [x] Security-related scripts follow the principle of least privilege Content sanitization guards run before any platform-bound mutation, and an inferred platform requires explicit user confirmation before the first mutating call. The `Backlog Manager` orchestrator holds no tracker write tool and no terminal tool, so a mutation it is asked to perform directly is unreachable rather than merely disallowed. Each executor carries exactly one platform's write surface. ## Release Communication The breaking change is communicated through Conventional Commits, not a hand-edited CHANGELOG. Each commit that removes or narrows a public surface carries a `!` marker and a `BREAKING CHANGE:` footer, so release-please derives the version bump and the release notes from the commit history. ## Additional Notes Opened as a draft. This branch is rebased onto current `main` as a single linear history; `collections/` and `plugins/` no longer exist there after microsoft#2577. **The reviewable surface is 98 files.** See the change-shape chart at the top of Changes: 119 relocated paths, 69 generated `docs/reference/` pages, and 83 retirements need no line-by-line reading. The 37 new and 61 edited files carry every substantive decision. `collections/` and `plugins/` no longer appear in this diff — both were removed from `main` by microsoft#2577. **Parallel PR.** This is one of two cut from the same working tree, alongside microsoft#2599 (artifact portability). Both branch from `main` and do not stack. Whichever merges second should resolve generated conflicts by discarding both sides and re-running `plugin:generate`, `docs:generate`, and `extension:prepare` rather than merging generated files by hand. **Known follow-ups**, recorded and not blocking: * `docusaurus.config.js` hardcodes the package list and omits `installer` and `rpi` — pre-existing at merge-base * `docs:generate` stamps `ms.date` on every page it touches regardless of content change, requiring a manual revert pass after every regeneration * The four retired Marketplace identities are orphaned with no tombstone mechanism * `docs/agents/project-planning/arch-diagram-builder.md` and `security-plan-creator.md` document agents that no longer exist — pre-existing at merge-base, not introduced here * A cross-platform Windows-path signature exemption needs its own change with mixed-token regression cases --------- Co-authored-by: Jamie Kim <jamiekim500@gmail.com>
# Pull Request ## Description Update `docs/architecture/agentic-workflows.md` to reflect the current manual PR Review workflow. Changes across the document: * Replace automatic PR-open and ready-for-review triggers with an authorized user's `/review` command in a PR conversation or inline review comment. * Update both Mermaid diagrams to show the manual transition into PR review. * Distinguish clean, blocking non-maintainer, and comment-only review outcomes. * Remove obsolete `skip-review` guidance. * Replace remaining automated-pipeline wording that contradicted the manual review trigger. * Bump `ms.date`. ## Related Issue(s) Fixes microsoft#1547 ## Type of Change **Code & Documentation:** * [x] Documentation update ## Testing Verified the documentation against `.github/workflows/pr-review.md`: * Confirmed the `slash_command` trigger, supported comment events, and authorized roles. * Confirmed clean reviews add `review-passed`, blocking non-maintainer findings add `needs-revision`, and advisory or non-blocking findings use `COMMENT` without an outcome label. * Confirmed no stale automatic-trigger or `skip-review` wording remains. * Confirmed canonical table formatting with the repository's pinned `markdown-table-prettify` 3.7.0 formatter. * Ran `git diff --check`. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) ## Security Considerations * [x] This PR does not contain any sensitive or NDA information --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jamie Kim <jamiekim500@gmail.com> Copilot-Session: cd770fd5-126c-407f-b990-397b33243f6f Copilot-Session: bdf33ccb-b040-4aa7-ae24-05180c9a1161
…tainers (microsoft#2673) # Pull Request ## Description Added the official GitHub Copilot CLI Dev Container Feature so contributors receive the `copilot` command after building or rebuilding the development container. Locked the feature artifact to an immutable SHA-256 digest and documented the installed command-line tool. ## Related Issue(s) Fixes microsoft#2672 ## Type of Change Select all that apply: **Code & Documentation:** * [ ] Bug fix (non-breaking change fixing an issue) * [x] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [ ] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [x] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot agent (`.github/agents/*.agent.md`) * [ ] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Contributions **MUST** target models listed in the model catalog (`scripts/linting/model-catalog.json`) whose provider appears in `providerAllowlist` and whose status is `ga` or `preview`. Run `npm run lint:models` to validate references. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [ ] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Sample Prompts (for AI Artifact Contributions) <!-- If you checked any boxes under "AI Artifacts" above, provide a sample prompt showing how to use your contribution --> <!-- Delete this section if not applicable --> **User Request:** <!-- What natural language request would trigger this agent/prompt/instruction? --> **Execution Flow:** <!-- Step-by-step: what happens when invoked? Include tool usage, decision points --> **Output Artifacts:** <!-- What files/content are created? Show first 10-20 lines as preview --> **Success Indicators:** <!-- How does user know it worked correctly? What validation should they perform? --> For detailed contribution requirements, see: * Common Standards: [docs/contributing/ai-artifacts-common.md](../docs/contributing/ai-artifacts-common.md) - Shared standards for XML blocks, markdown quality, RFC 2119, validation, and testing * Agents: [docs/contributing/custom-agents.md](../docs/contributing/custom-agents.md) - Agent configurations with tools and behavior patterns * Prompts: [docs/contributing/prompts.md](../docs/contributing/prompts.md) - Workflow-specific guidance with template variables * Instructions: [docs/contributing/instructions.md](../docs/contributing/instructions.md) - Technology-specific standards with glob patterns * Skills: [docs/contributing/skills.md](../docs/contributing/skills.md) - Task execution utilities with cross-platform scripts ## Testing * Passed `npm run validate:devcontainer-lockfile`. * Passed `npm run validate:docs` after installing the documentation package dependencies: 10 suites and 105 tests passed. * Passed `npm run spell-check`: 844 files checked with no issues. * Rebuilt the development container and confirmed `/usr/local/bin/copilot --version` reports GitHub Copilot CLI 1.0.79. * `npm run validate:local` reached link validation and reported unrelated failures in three RAI documentation files. * Deferred the standalone `npm run lint:md-links` result to hosted CI. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [ ] Tests added for new functionality (N/A - the change uses a declarative Dev Container Feature and existing lock validation) ### AI Artifact Contributions <!-- If contributing an agent, prompt, instruction, or skill, complete these checks --> * [ ] Used `hve-builder` review mode to review contribution * [ ] Addressed all actionable findings from the `hve-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Local Checks The following local-safe validation commands must pass before merging: * [ ] Local validation aggregate: `npm run validate:local` (pending hosted CI; local run was blocked by unrelated RAI link failures) * [x] Documentation validation (if docs changed): `npm run validate:docs` * [x] Spell checking: `npm run spell-check` * [ ] Link validation: `npm run lint:md-links` (pending hosted CI) ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues * [ ] Security-related scripts follow the principle of least privilege (N/A - no security scripts changed) ## Additional Notes The feature release is pinned by OCI digest, while the feature's CLI version option retains its default of `latest`. The rebuilt container installed GitHub Copilot CLI 1.0.79. Pinning the CLI version separately can be considered if deterministic CLI binaries become a requirement. Co-authored-by: Bill Berry <WilliamBerryiii@users.noreply.github.com> Co-authored-by: Jamie Kim <jamiekim500@gmail.com>
…te (microsoft#2621) ## Description Issue Triage has been failing on every issue opened by an organization member whose effective repository permission is `read`. Five `[aw]` failure issues across four triggering issues over eight days, consuming 183.4 AIC and producing zero triage outcomes. ### Root cause The workflow declared no `tools:` block, so it inherited gh-aw's automatic public-repository guard policy of `min-integrity: approved`. That threshold requires write access or public organization membership. Meanwhile the workflow's own `roles: [admin, maintainer, write, triage]` gate admits `read`-level authors. From the gateway log of run 31106008135: ```text [integrity] issue:microsoft#2613: author_association floor below writer (rank=2), checking collaborator permission for Salazander get_collaborator_permission: microsoft/hve-core user Salazander -> permission=Some("read") integrity=["none:public", "unapproved:public"] Integrity CheckFlow denied: source missing required tags=[approved:public] ``` `author_association` reports `NONE` because the Actions token cannot observe private `microsoft` organization membership, so the guard falls back to the collaborator-permission path and lands on `read`, one level below the required `approved`. The activation gate and the integrity gate disagreed. The workflow started on issues it was then forbidden to read. ### Amplifiers found while investigating | Amplifier | Evidence | |---|---| | The agent had no fallback source for issue content. The prompt supplied only `issue-number`, so the filtered `issue_read` left nothing to triage. | Run artifact `aw-prompts/prompt.txt` | | The agent retried the blocked read across MCP, the `gh` CLI, and search. Run 30873207503 reached 406.5k tokens and 61 AIC before the copilot engine terminated. | microsoft#2595, microsoft#2596 | | Each triggering issue ran triage twice. `opened` and the template-applied `needs-triage` `labeled` event fire within one second, and the compiled concurrency group had no `cancel-in-progress`. | Runs 30873207503 and 30873208337, both created at 02:55:10-11Z for issue microsoft#2594 | | `report_incomplete` was not the only failure category. microsoft#2596 also emitted `missing_data`, which carries its own independent report-as-failure flag. | microsoft#2596 | ### Changes | Change | Effect | |---|---| | `tools.github.min-integrity: unapproved` | Admits the same author class the `roles` gate already admits. Also restores duplicate detection, which was silently dropping community-authored issues from search results. | | `tools.github.allowed-repos: public` | Preserves the scope the runtime previously resolved. Declaring `tools.github` without it compiles `repos` to `all`. | | `tools.github.toolsets: [context, repos, issues]` | Drops the unused `pull_requests` toolset, which had no matching `pull-requests: read` permission. Clears a compile warning without granting a new permission. | | `safe-outputs.report-failure-as-issue: ["!report_incomplete", "!missing_data"]` | Stops both categories from creating failure issues. `agent_failure`, `timed_out`, `missing_tool`, and `missing_safe_outputs` continue to report. | | `${{ steps.sanitized.outputs.text }}` in the prompt body | Delivers the triggering issue title and body outside the MCP guard, removing the single point of failure. Mirrors the existing pattern in `issue-implement.md`. | | `## When Issue Content Is Unavailable` section | One read attempt, no cross-path retry, leave `needs-triage`, post one comment, `noop`. Caps the cost blowup and removes the failure signal. | | Explicit `concurrency` block with `cancel-in-progress: true` | Collapses the duplicate run. The group is prefixed with `contains(github.actor, '[bot]') && github.run_id` so labels applied by this workflow cannot cancel the run still applying them, per the gh-aw compiler's self-cancellation guidance. | `issue-triage.lock.yml` is regenerated output from `gh aw compile` (pinned to v0.83.1, matching the existing lock metadata). Do not hand-edit it. ## Related Issue(s) Fixes microsoft#2614 Fixes microsoft#2596 Fixes microsoft#2595 Fixes microsoft#2575 Fixes microsoft#2563 ## Type of Change Select all that apply: **Code & Documentation:** * [x] Bug fix (non-breaking change fixing an issue) * [ ] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [ ] Documentation update **Infrastructure & Configuration:** * [x] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot agent (`.github/agents/*.agent.md`) * [ ] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Contributions **MUST** target models listed in the model catalog (`scripts/linting/model-catalog.json`) whose provider appears in `providerAllowlist` and whose status is `ga` or `preview`. Run `npm run lint:models` to validate references. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [ ] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Sample Prompts (for AI Artifact Contributions) <!-- If you checked any boxes under "AI Artifacts" above, provide a sample prompt showing how to use your contribution --> <!-- Delete this section if not applicable --> **User Request:** <!-- What natural language request would trigger this agent/prompt/instruction? --> **Execution Flow:** <!-- Step-by-step: what happens when invoked? Include tool usage, decision points --> **Output Artifacts:** <!-- What files/content are created? Show first 10-20 lines as preview --> **Success Indicators:** <!-- How does user know it worked correctly? What validation should they perform? --> For detailed contribution requirements, see: * Common Standards: [docs/contributing/ai-artifacts-common.md](../docs/contributing/ai-artifacts-common.md) - Shared standards for XML blocks, markdown quality, RFC 2119, validation, and testing * Agents: [docs/contributing/custom-agents.md](../docs/contributing/custom-agents.md) - Agent configurations with tools and behavior patterns * Prompts: [docs/contributing/prompts.md](../docs/contributing/prompts.md) - Workflow-specific guidance with template variables * Instructions: [docs/contributing/instructions.md](../docs/contributing/instructions.md) - Technology-specific standards with glob patterns * Skills: [docs/contributing/skills.md](../docs/contributing/skills.md) - Task execution utilities with cross-platform scripts ## Testing Automated validation run locally: | Check | Command | Result | |---|---|---| | Workflow compilation | `gh aw compile issue-triage` | 0 errors, 0 warnings. The pre-change file also compiled with 0 warnings, so no regression was introduced. | | Action version consistency | `scripts/security/Test-ActionVersionConsistency.ps1 -FailOnMismatch` | Pass. 602 SHA-pinned actions scanned, 0 mismatches, 0 missing version comments. | | Dependency pinning | `scripts/security/Test-DependencyPinning.ps1 -FailOnUnpinned` | Pass. 652 dependencies, 0 unpinned, 100% compliance. | | Workflow permissions | `scripts/security/Test-WorkflowPermissions.ps1 -FailOnViolation` | Pass. All workflows and jobs passed. | | Markdown custom rules | Mechanical check against `.markdownlint.json` | 0 em dashes, 0 bolded-prefix list items, 0 trailing whitespace, 0 lines over the 500-character limit, 0 new violations relative to the base file. | Compiled guard policy verified in the regenerated lock file: ```json "min-integrity": "unapproved", "repos": "public" ``` Not performed: * `npm run validate:local` and the other Node-based lint lanes could not run in this environment. The npm registry is unreachable (`ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE`) and `node_modules/.bin` is absent. Markdown conformance was verified mechanically against the repository lint configuration instead. **Please run `npm run validate:local` on a working network before merging.** * No runtime execution of the workflow. Behavior is asserted from the compiled lock file and from the run artifacts of the five failing runs. ## Checklist ### Required Checks * [ ] Documentation is updated (if applicable) (N/A — no user-facing documentation changed; rationale is captured in workflow frontmatter comments) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [ ] Tests added for new functionality (if applicable) (N/A — agentic workflow behavior is not covered by the Pester or pytest suites) ### AI Artifact Contributions <!-- If contributing an agent, prompt, instruction, or skill, complete these checks --> * [ ] Used `hve-builder` review mode to review contribution * [ ] Addressed all actionable findings from the `hve-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Local Checks The following local-safe validation commands must pass before merging: * [ ] Local validation aggregate: `npm run validate:local` (blocked locally — npm registry unreachable; must be run by a reviewer) * [ ] Documentation validation (if docs changed): `npm run validate:docs` (N/A — no docs changed) * [ ] Spell checking: `npm run spell-check` (blocked locally — npm registry unreachable) * [ ] Link validation: `npm run lint:md-links` (blocked locally — npm registry unreachable) ## Security Considerations <!--⚠️ WARNING: Do not commit sensitive information such as API keys, passwords, or personal data --> * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues (N/A — no dependency changes) * [x] Security-related scripts follow the principle of least privilege (N/A — no security scripts modified) ### Reviewer attention: this PR intentionally lowers an integrity threshold `min-integrity` moves from the inherited default of `approved` to `unapproved`. Reviewers should weigh this deliberately. Why it is acceptable here: * gh-aw documentation recommends `unapproved` for community triage and planning workflows, and the upstream `repo-assist` example applies the same override for the same reason. * Activation is already gated by `roles: [admin, maintainer, write, triage]`, so the workflow does not run for arbitrary authors. * Safe outputs remain narrow: comments capped at 3 on the triggering issue, labels restricted to a fixed allow-list with `admin-only` and `do-not-triage` blocked, and `needs-triage` as the only removable label. No code, branch, or pull request writes. * The one escalation path, the `agent-ready` label consumed by `issue-implement.md`, is already cut off by that workflow's `skip-bots: ["github-actions[bot]"]`. Compensating changes in this PR: * `allowed-repos: public` is now explicit rather than left to default to `all`. * `toolsets` is narrowed from four to three, removing a toolset that had no matching permission. ### Out-of-scope change deliberately reverted `gh aw compile` rewrites the shared `github/gh-aw-actions/setup` entry in `.github/aw/actions-lock.json` from v0.81.6 to v0.83.1. That entry is still referenced by `vex-draft.lock.yml`, which was compiled with v0.81.6. The file was reverted and is not part of this PR. Bumping it should be a deliberate change that also recompiles `vex-draft`. ## Additional Notes ### Not addressed here The same latent contradiction exists fleet-wide. No workflow under `.github/workflows/*.md` declares a `tools:` block, so `pr-review`, `dependency-pr-review`, `issue-implement`, and `doc-update-check` all inherit `min-integrity: approved`. They gate on write-or-above so they do not hit the activation mismatch, but their reads of comments authored by read-level accounts are still being silently filtered. Worth a follow-up issue. ### Superseded failure issues The five `[aw]` issues listed under Related Issues are bot-generated and carry gh-aw expiry checkboxes. They can be closed once this merges, or left to expire. --------- Co-authored-by: Jamie Kim <kimjimin@microsoft.com>
…crosoft#2633) ## Description Makes CQ-6 an enforceable, deterministic control rather than a documented aspiration. `Test-DangerousWorkflow.ps1` gains a second rule, `dangerous-workflow/direct-input-interpolation`, which resolves every `inputs.<name>` reference found in a `run:` body or an `actions/github-script` `script:` body against the type declared in `on.workflow_call.inputs` or `on.workflow_dispatch.inputs`, and reports any reference whose type is not `boolean`. The rule is type-driven rather than text-driven, and an input whose type cannot be resolved is reported so the gate fails closed. `boolean` is the sole exception, because GitHub constrains that type to the literals `true` and `false`, so the substituted text can carry no shell metacharacters. The fleet was migrated to satisfy the rule: 26 step contexts across 13 workflows and 1 composite action now route caller-controlled values through step-level `env:` mappings named `INPUT_<UPPER_SNAKE>` and read native shell variables. The inventory went from 64 input references across 37 contexts to 24 references across 17 contexts, all `boolean`. ### Two things reviewers should look at One behavior change. `weekly-security-maintenance.yml` previously substituted a caller value into bare, unquoted PowerShell source (`$thresholdDays = ${{ inputs.max-age-days || 30 }}`), the worst-shaped interpolation in the repository. Two report lines there also lacked the `|| 30` fallback that five sibling lines had, so scheduled runs rendered `Stale SHAs (> days)`. Consolidating on one `env:` mapping applies the default uniformly, so that text now reads `>30 days`. Scope slightly wider than the issue. microsoft#2623 frames CQ-6 around reusable workflows. This PR also covers `workflow_dispatch` inputs and composite action metadata, because the injection mechanics are identical and `type: number` is only strictly validated on the `workflow_call` path. Composite actions are held to a stricter rule with no exception: the action metadata schema gives `inputs.<input_id>` only `description`, `required`, `default`, and `deprecationMessage`, so no action input can declare itself boolean. T-3 was broadened to match the enforced control. ### Commits | Commit | Change | |------------|-----------------------------------------------------------------| | `201db9cc` | `fix(workflows)` — 12 reusable workflows migrated | | `8248580f` | `fix(actions)` — `setup-ps-modules` migrated | | `7df947d3` | `feat(scripts)` — CQ-6 rule, composite action scanning, CI wiring | | `27c7d8fb` | `docs(security)` — CQ-6 boundary and T-3 posture | | `7374daf4` | `fix(scripts)` — multi-line expression matching | The final commit fixes a pre-existing bug: `Get-ExpressionMatches` lacked `RegexOptions.Singleline`, so an expression whose body spans lines was invisible to both rules, including template-injection. Verified with a fixture that scanned clean before and fails now. ## Related Issue(s) Fixes microsoft#2623 Follow-up tracked in microsoft#2632 (provenance tracking through `matrix` and job outputs — no current exposure, blocked on a suppression-semantics design decision). ## Type of Change Select all that apply: **Code & Documentation:** * [x] Bug fix (non-breaking change fixing an issue) * [x] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [x] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [x] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** No AI artifacts changed. No agents, prompts, instructions, skills, hooks, or eval specs are touched by this PR. **Other:** * [x] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Testing | Check | Result | |----------------------------------------------------------------------------------------|-----------------------------| | `npm run test:ps -- -TestPath scripts/tests/security/Test-DangerousWorkflow.Tests.ps1` | 31 passed, 0 failed | | `npm run test:ps -- -TestPath scripts/tests/security/` | 612 passed, 0 failed | | `npm run lint:dangerous-workflow` | 67 files, no findings, exit 0 | | `npm run lint:yaml` | pass | | `npm run lint:ps` | pass | Beyond the suites: * Ran the gate before migration and confirmed exactly 26 findings, matching a count derived independently from a structured inventory. This cross-validates the rule against the classification rather than assuming they agree. * Parsed every migrated `pwsh` `run:` body with `System.Management.Automation.Language.Parser`. No parse failures introduced; two pre-existing failures in `eval-validation.yml` reproduce identically on `main`. * Verified each commit leaves `dangerous-workflow-check` green by running the CI invocation in a throwaway worktree at the intermediate commits. * 19 new Pester fixtures covering pwsh and bash, `string` / `number` / `boolean` / undeclared / untyped inputs, github-script bodies, compound and multi-line expressions, composite and non-composite actions, multi-root scanning, and both documented passing shapes. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [x] Tests added for new functionality (if applicable) Backwards-compatibility note: `Test-DangerousWorkflow.ps1 -Path` changed from `[string]` to `[string[]]` and its default now includes `.github/actions`. Existing single-path callers bind unchanged. Any external caller passing an array previously would have failed anyway. ### AI Artifact Contributions Not applicable. No AI artifacts changed. ### Required Local Checks The following local-safe validation commands must pass before merging: * [ ] Local validation aggregate: `npm run validate:local` * [ ] Documentation validation (if docs changed): `npm run validate:docs` * [ ] Spell checking: `npm run spell-check` * [ ] Link validation: `npm run lint:md-links` ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues — no new dependencies * [x] Security-related scripts follow the principle of least privilege — no permission changes ### Review of this diff This branch was reviewed for security before submission. Three findings resulted; two are fixed here and one is deferred with no current exposure. | ID | Severity | Finding | Disposition | |-----|----------|---------|-------------| | F-1 | High | The CI wiring that scans `.github/actions` was originally committed two commits before the `[string[]]$Path` change that makes it valid. `dangerous-workflow-check` is a required check, and it failed at those commits with a parameter-binding error. | Fixed. The wiring now sits in `7df947d3` alongside the parameter change. Verified by running the CI invocation in a throwaway worktree at the intermediate commit: exit 0, previously exit 1. | | F-2 | Medium | `Get-ExpressionMatches` lacked `RegexOptions.Singleline`, so an expression whose body spans lines was invisible to both rules, including the pre-existing template-injection rule. | Fixed in `7374daf4`, with regression fixtures for both rules and an assertion that findings report the expression on one line. | | F-3 | Low | A caller-controlled value that passes through `strategy.matrix` or a job output is not tracked, so a future `run:` body consuming it would bypass CQ-6. | Tracked in microsoft#2632. No current exposure: the one job whose matrix derives directly from an input consumes it only in `env:` and artifact-name positions, and all 24 run-body matrix references resolve to repository-controlled generation. | The review was a targeted control assessment rather than the full multi-skill pipeline. That pipeline filters `*.yml`, `*.yaml`, and `*.md` out of diff scope, which would have excluded all 15 workflows, the composite action, and both documentation files, leaving only the two PowerShell files. ## Additional Notes No caller currently passes a workflow input into `setup-ps-modules`, so the composite action portion closes a latent detection gap rather than an active exposure. Stating that plainly rather than overselling it. The prior automated attempt on this issue (branch `feat/cq6-caller-input-isolation-*`, and the comment on microsoft#2623) claims the enforcement and Pester coverage were already in place. That is not true against `main`; there was no `inputs.*` handling anywhere in the scanner. This work was built against `main` and does not reuse that branch.
…d the runtime harness (microsoft#2566) # fix(docs): resolve documentation site accessibility defects and extend the runtime harness ## Description This branch closes out the documentation site accessibility follow-ups and extends the accessibility skill's runtime harness with the machinery those fixes needed. Three of the changes are genuine product defects on the published docs site; the rest is permanent regression coverage plus the harness work that made the defects reproducible in the first place. > A recurring theme in this work: several behaviors previously classified as "manual only" turned out to be automatable once the right measurement was found. Text zoom is the clearest example — it had been recorded as undriveable from Playwright, but browser zoom is equivalent to a scaled viewport at a matching `deviceScaleFactor`, which makes it a deterministic matrix. ### Documentation site fixes Three defects were reproduced against a locally served build before any fix was written, and each fix is now locked by a test proven to fail without it. - Fixed the **search clear button** in *src/theme/SearchBar/index.jsx*. The swizzled component looked for `button[type="reset"], button[class*="clear"]`, but the upstream theme renders the control as `<button class="searchClearButton_qk4g">` with no `type` attribute. CSS attribute matching is case-sensitive, so `[class*="clear"]` never matched `searchClearButton`. The selector now carries the case-insensitive flag. - This one had been masked: the product code and its test shared the same faulty selector, so the test took a skip branch instead of failing. - Fixed **navbar overlap at narrow viewports** in *src/css/custom.css*. The search plugin's container is absolutely positioned and sits outside the flex flow, so no flex rule on its siblings could resolve the overlap. The brand title is now visually hidden below 420px while retaining its accessible name. - Fixed **search placeholder clipping under text zoom** in the same file. The keyboard shortcut badge is hidden below 996px, which restores usable width for the placeholder. ### Regression coverage - Added *e2e/text-zoom.spec.ts*, which exercises a zoom matrix from 100% through 250% by pairing scaled viewports with matching device scale factors, then measures required placeholder width against usable width. - Added table, search keyboard, arrow navigation, and search page status specs. - Extended *e2e/contrast.spec.ts* so every prose link must carry a non-color cue, and *e2e/focus-management.spec.ts* so every visible focusable draws an indicator of at least 2 CSS pixels. - Added `waitForHydration` to *e2e/_helpers/a11yInvariants.ts* and applied it across twelve specs. Docusaurus sets `data-has-hydrated` on the document element after React hydration; several specs were asserting against click handlers, focus styles, and axe results before that point, which is what produced the intermittent failures. ### Accessibility skill runtime harness - Split AT case execution, calibration, and visual review into discrete modules under *scripts/runtime_a11y/runner/*, replacing a single monolithic path. - Added an **ARIA-AT catalog** with a JSON Schema and SHA-pinned upstream provenance covering five patterns. The public posture is deliberately conservative: entries default to manual-only and JAWS remains human-led. - Added `render-artifacts`, `capture-visual-review`, `run-calibration`, and `run-at-plan` subcommands, along with output-path containment checks. - Fixed a **stray browser window leak**. The harness previously invoked `chrome.exe --version` to read the browser version; on Windows that opens a window rather than printing and exiting, and the call was made twice in one expression. Version detection now reads file metadata instead. - Introduced a **method-adequacy taxonomy** distinguishing criteria that static analysis can decide from those it can only inform, with CI enforcement graduated by tier. ### Documentation - Added a manual validation guide under *docs/contributing/* organizing per-behavior steps into seven workstreams with a traceability register and evidence template. - Added a shared real screen reader testing runbook under *docs/planning/runbooks/accessibility/*. ## Related Issue(s) None ## Type of Change Select all that apply: **Code & Documentation:** * [x] Bug fix (non-breaking change fixing an issue) * [x] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `prompt-builder` agent and addressed all feedback * [x] Copilot instructions (`.github/instructions/*.instructions.md`) * [x] Copilot prompt (`.github/prompts/*.prompt.md`) * [x] Copilot agent (`.github/agents/*.agent.md`) * [x] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Only contributions targeting the **latest Anthropic and OpenAI models** will be accepted. Older model versions (e.g., GPT-3.5, Claude 3) will be rejected. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [x] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Sample Prompts (for AI Artifact Contributions) **User Request:** "Generate the accessibility coverage matrix for this project and render the evidence bundle." **Execution Flow:** The coverage matrix prompt builds a surface inventory across surfaces and interaction states, then classifies each criterion by method adequacy — whether static analysis can decide it or only inform it. It invokes the runtime harness `render-artifacts` subcommand to produce the evidence bundle. Criteria in the announcement, interaction, and adaptive-rendering classes are routed to manual verification rather than reported as automated passes. Unresolved assistive-technology work is routed to the shared real screen reader runbook. **Output Artifacts:** A six-file bundle: coverage matrix as JSON and Markdown, an EARL JSON-LD report, manual test plans in Markdown and YAML, and a manifest. For example, the manual plan opens with the surface and state inventory, followed by per-criterion steps and an evidence template with a four-value result vocabulary. **Success Indicators:** The manifest lists all six artifacts, the EARL report maps informs-only methods to `earl:cantTell` rather than a pass, and every criterion that cannot be decided statically appears in the manual plan rather than being silently marked as covered. For detailed contribution requirements, see: * Common Standards: [docs/contributing/ai-artifacts-common.md](../docs/contributing/ai-artifacts-common.md) - Shared standards for XML blocks, markdown quality, RFC 2119, validation, and testing * Agents: [docs/contributing/custom-agents.md](../docs/contributing/custom-agents.md) - Agent configurations with tools and behavior patterns * Prompts: [docs/contributing/prompts.md](../docs/contributing/prompts.md) - Workflow-specific guidance with template variables * Instructions: [docs/contributing/instructions.md](../docs/contributing/instructions.md) - Technology-specific standards with glob patterns * Skills: [docs/contributing/skills.md](../docs/contributing/skills.md) - Task execution utilities with cross-platform scripts ## Testing Automated validation captured on this branch **before** the most recent merge from `main`: | Check | Result | |-------|--------| | `npm run test:node` | Passed, 120 of 120 | | Playwright e2e suite | Passed, 248 passed and 2 skipped | | Docusaurus `npm run typecheck` | Passed | | `npm run lint:md` | Passed | | `npm run lint:frontmatter` | Passed, 823 files with no errors or warnings | Re-run **after** the merge, on the tree as proposed: | Check | Result | |-------|--------| | `npm run lint:frontmatter` | Passed | | `npm run validate:skills` | Passed, 56 skills with no errors or warnings | Each new lock was proven non-vacuous by confirming it fails before the corresponding fix and passes after. The contrast lock moved from 0 to 19 offenders when the fix was reverted; the focus indicator lock moved from 0 to 77; the zoom matrix moved from 4 passing to 2 failing. The e2e suite went from 217 passing with 16 skips to 248 passing with 2 skips, and full-suite runtime dropped from 12.0 minutes with 4 failures to 2.9 minutes with none. > [!IMPORTANT] > The Node-based checks could not be re-run after the merge. A TLS handshake failure between this workstation and the public npm registry currently blocks dependency installation, which leaves both the repository root and `docs/docusaurus` without a complete `node_modules`. That is an environment fault on the authoring machine, not a defect in this branch. CI installs from a clean environment and should be treated as the authoritative signal for every unchecked item below. Manual testing has not yet been performed. A manual validation pass covering the remaining behaviors is planned as a follow-up using the runbook added in this branch. Security review of the diff found no secrets, tokens, credentials, or personal data, and no non-inclusive language. All new Python and Node modules carry Microsoft copyright and SPDX identifiers. The skill-local lockfile resolves from the public npm registry. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [x] Tests added for new functionality (if applicable) ### AI Artifact Contributions <!-- If contributing an agent, prompt, instruction, or skill, complete these checks --> * [ ] Used `/prompt-analyze` to review contribution * [ ] Addressed all feedback from `prompt-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Automated Checks The following validation commands must pass before merging: * [ ] Markdown linting: `npm run lint:md` * [ ] Spell checking: `npm run spell-check` * [x] Frontmatter validation: `npm run lint:frontmatter` * [x] Skill structure validation: `npm run validate:skills` * [ ] Link validation: `npm run lint:md-links` * [ ] PowerShell analysis: `npm run lint:ps` * [ ] Eval spec schema and coverage (if AI artifacts changed): `npm run eval:lint:schema` * [ ] Plugin freshness: `npm run plugin:generate` * [ ] Docusaurus tests: `npm run docs:test` ## Security Considerations <!--⚠️ WARNING: Do not commit sensitive information such as API keys, passwords, or personal data --> * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues * [x] Security-related scripts follow the principle of least privilege ## GHCP Artifact Maturity > [!WARNING] > This PR includes **experimental** GHCP artifacts that may have breaking changes. > > - `.github/agents/accessibility/accessibility-planner.agent.md` > - `.github/agents/accessibility/accessibility-reviewer.agent.md` > - `.github/agents/accessibility/subagents/accessibility-framework-assessor.agent.md` > - `.github/instructions/accessibility/accessibility-identity.instructions.md` > - `.github/prompts/accessibility/accessibility-coverage-matrix.prompt.md` > - `.github/skills/accessibility/accessibility/SKILL.md` | File | Type | Maturity | Notes | |---------------------------------------------|--------------|-----------------|------------------| | `accessibility-planner.agent.md` | Agent |⚠️ experimental | Pre-release only | | `accessibility-reviewer.agent.md` | Agent |⚠️ experimental | Pre-release only | | `accessibility-framework-assessor.agent.md` | Agent |⚠️ experimental | Pre-release only | | `accessibility-identity.instructions.md` | Instructions |⚠️ experimental | Pre-release only | | `accessibility-coverage-matrix.prompt.md` | Prompt |⚠️ experimental | Pre-release only | | `accessibility/SKILL.md` | Skill |⚠️ experimental | Pre-release only | ### GHCP Maturity Acknowledgment - [ ] I acknowledge this PR includes non-stable GHCP artifacts - [ ] Non-stable artifacts are intentional for this change ## Additional Notes **Known limitation — live-region announcement capture.** Spoken verification of live regions through the guidepup and NVDA path did not capture announcements across repeated settle windows, including runs against a positive-control fixture that updated every two seconds over settle windows up to eight seconds. Timing, capture clearing, focus placement, screen reader configuration, and browser accessibility flags were each eliminated as causes. The two docs-site journeys that depend on announcements are therefore recorded as manual-boundary items rather than reported as product failures. The positive-control fixture added in *docs/docusaurus/static/a11y-positive-control.html* exists to validate the oracle before any silent live region is attributed to the product. **Behavior change in the harness.** The runtime harness now requires `npm ci` in its skill-local directory before probe execution, replacing the previous ephemeral `npx` approach. The workflow template documents this step. **Follow-up work.** A manual assistive-technology pass remains outstanding for the behaviors that automation cannot decide. A runbook comment with per-behavior steps will be added to this PR to support that pass. --------- Co-authored-by: Jamie Kim <jamiekim500@gmail.com>
…#2689) ## Description This PR fixed Copilot CLI installation from the HVE Core marketplace by adding the shared manifest resolved from the canonical `.github` Git source. Marketplace entries continued to own package-specific component membership, while repository validation, fixtures, tests, and documentation now use the same shared-source contract. * Added `.github/plugin.json` with the `hve-core` source identity and explicit empty component defaults. * Replaced optional generated `plugins/<name>/plugin.json` validation with a required shared-manifest check. * Updated fixture repositories and focused tests for accepted and absent shared manifests. * Documented complete source-tree copying, entry-selected component loading, unchanged channel refs, and the separate role of generated release ZIPs. ## Related Issue(s) None. ## Type of Change Select all that apply: **Code & Documentation:** * [x] Bug fix (non-breaking change fixing an issue) * [x] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot agent (`.github/agents/*.agent.md`) * [ ] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Contributions **MUST** target models listed in the model catalog (`scripts/linting/model-catalog.json`) whose provider appears in `providerAllowlist` and whose status is `ga` or `preview`. Run `npm run lint:models` to validate references. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [x] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Sample Prompts (for AI Artifact Contributions) <!-- If you checked any boxes under "AI Artifacts" above, provide a sample prompt showing how to use your contribution --> <!-- Delete this section if not applicable --> **User Request:** <!-- What natural language request would trigger this agent/prompt/instruction? --> **Execution Flow:** <!-- Step-by-step: what happens when invoked? Include tool usage, decision points --> **Output Artifacts:** <!-- What files/content are created? Show first 10-20 lines as preview --> **Success Indicators:** <!-- How does user know it worked correctly? What validation should they perform? --> For detailed contribution requirements, see: * Common Standards: [docs/contributing/ai-artifacts-common.md](../docs/contributing/ai-artifacts-common.md) - Shared standards for XML blocks, markdown quality, RFC 2119, validation, and testing * Agents: [docs/contributing/custom-agents.md](../docs/contributing/custom-agents.md) - Agent configurations with tools and behavior patterns * Prompts: [docs/contributing/prompts.md](../docs/contributing/prompts.md) - Workflow-specific guidance with template variables * Instructions: [docs/contributing/instructions.md](../docs/contributing/instructions.md) - Technology-specific standards with glob patterns * Skills: [docs/contributing/skills.md](../docs/contributing/skills.md) - Task execution utilities with cross-platform scripts ## Testing Fast validation was run against the changed surfaces after merging current `origin/main`: * `npm run test:ps -- -TestPath "scripts/tests/plugins/Validate-Marketplace.Tests.ps1"` - passed, 71 tests * `npm run lint:marketplace` - passed, 10 plugins * `npm run lint:plugin-output` - passed, no tracked plugin output or symbolic links * `npm exec -- markdownlint-cli2 "scripts/plugins/README.md" "docs/getting-started/methods/cli-plugins.md"` - passed, 0 issues * `git diff --check origin/main...HEAD` - passed Security analysis found no sensitive data, dependency changes, permission changes, or privilege expansion. Manual testing was not performed. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [ ] Changes are backwards compatible (if applicable) * [x] Tests added for new functionality (if applicable) ### AI Artifact Contributions <!-- If contributing an agent, prompt, instruction, or skill, complete these checks --> * [ ] Used `hve-builder` review mode to review contribution * [ ] Addressed all actionable findings from the `hve-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Local Checks The following local-safe validation commands must pass before merging: * [ ] Local validation aggregate: `npm run validate:local` (skipped by caller direction; changed-surface checks passed) * [ ] Documentation validation (if docs changed): `npm run validate:docs` (skipped by caller direction; targeted Markdown lint passed) * [ ] Spell checking: `npm run spell-check` (skipped by caller direction) * [ ] Link validation: `npm run lint:md-links` (skipped by caller direction) ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [ ] Any new dependencies have been reviewed for security issues (N/A - no dependency changes) * [ ] Security-related scripts follow the principle of least privilege (N/A - no security-related script changes) ## Additional Notes The branch was merged with current `origin/main` before PR generation. The broad template validation commands were intentionally not run; validation was limited to fast checks that own the changed files and behavior.
…t Records (microsoft#2611) Adds a UX design capability to HVE Core and extends the accessibility skill with a Design Intent Record contract, so UX practice, engineering handoff, and accessibility verification share one evidence model. Two new skills join the `design-thinking` collection, routed by the existing `ux-ui-designer` agent: * `ux-artifacts` produces durable, evidence-labelled UX assets in five modes: `frame-needs`, `map-journey`, `sketch-structure`, `decide-inclusion`, and `prepare-handoff`. Every claim carries an evidence class of Observed, Reported, or Assumed, and unresolved items stay visible rather than becoming invented research. * `ux-coaching` supports problem framing, design critique, and stakeholder advocacy as a conversation rather than an artifact. Completed assets can be mapped to Figma or Mural. Mapping produces destination intent only; it never authenticates, selects tools, or performs an external write. Callers supply `destination-kind`, `destination-target`, and, for Figma, `destination-change`. A missing value returns a bounded missing-input result naming the absent fields instead of inferring one. The accessibility skill gains a Design Intent Record contract, authored and verification JSON schemas, the `Validate-DesignIntent.ps1` validator with contract regression tests, runtime probe intent and projection modules, and a Graphics ARIA and SVG AAM framework reference. A new `lint:design-intent` script joins the `validate:local` aggregate. `dt-coach`, the canonical deck, and the coaching-state references are reconciled with the new UX routes so coaching and artifact production do not overlap. Collections, plugin outputs, extension manifests, and generated reference documentation are regenerated by their owners. The written Markdown asset stays authoritative. A Figma, FigJam, or Mural rendering is a projection and never supersedes it. Technical accessibility conformance and COGA guidance remain owned by the `accessibility` skill; UX assets route conformance questions there rather than answering them. Closes microsoft#2609 Select all that apply: **Code & Documentation:** * [ ] Bug fix (non-breaking change fixing an issue) * [x] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [x] Reviewed contribution with `hve-builder` and addressed all actionable findings * [x] Copilot instructions (`.github/instructions/*.instructions.md`) * [x] Copilot prompt (`.github/prompts/*.prompt.md`) * [x] Copilot agent (`.github/agents/*.agent.md`) * [x] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [x] Eval spec added/updated for changed AI artifacts (`evals/`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Contributions **MUST** target models listed in the model catalog (`scripts/linting/model-catalog.json`) whose provider appears in `providerAllowlist` and whose status is `ga` or `preview`. Run `npm run lint:models` to validate references. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [x] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): **User Request:** ```text Use the completed problem-framing output for the renewal flow to create a current-state journey. Preserve unresolved evidence gaps and do not publish it. ``` **Execution Flow:** 1. The `ux-ui-designer` agent recognises the request as artifact production rather than coaching, and asks a single routing question only if the request matches more than one capability. 2. It calls `ux-artifacts` with `mode=map-journey`, `project`, `subject`, and the coaching `output_ref` passed as the explicit `source`. 3. The skill reads `references/evidence-model.md`, then loads only the selected mode reference. 4. It consumes the supplied source and writes one current asset. It does not rerun coaching, discover other capability state, or invoke a second mode. 5. Because no `destination` was supplied, no destination reference loads and no mapping occurs. **Output Artifacts:** ```text .copilot-tracking/ux-artifacts/renewal-flow/returning-customer/map-journey.md ``` ```markdown <!-- markdownlint-disable-file --> * Project: renewal-flow * Subject: Returning customer * Mode: map-journey * Status: current * Source references: .copilot-tracking/ux-coaching/renewal-flow/problem-framing.md * Users reach the renewal screen from the account menu. Source: M6 problem-framing, session notes. * Support reports confusion at the payment-method step. Source: M6 problem-framing. * Users recognise the renewal date format. Unvalidated. * No evidence covers the post-payment confirmation stage. ``` **Success Indicators:** The asset exists at the canonical path, every claim sits under an evidence heading, and stages without evidence appear under `Unresolved` rather than being filled in. No external write occurred and no Figma or Mural content was produced. Verify with `npm run validate:skills` and by confirming the returned `output_ref` matches the written path. Local validation lanes run against the changed content: | Check | Result | |-------|--------| | `npm run validate:skills` | 64 skills, 0 errors, 0 warnings | | `npm run lint:frontmatter` | 0 errors, 0 warnings | | `npm run lint:ai-artifacts` | 0 files with issues | | `npm run lint:asset-docs` | 0 errors, pre-existing warnings only | | `npm run docs:generate:check` | 0 create, 0 update, 0 remove, 232 unchanged | | `npm run lint:marketplace` | 10 plugins, 0 errors | | `npm run lint:yaml` | 67 workflow files passed | | `npm run lint:json` | 57 JSON files passed | | `npm run lint:ps` | 0 findings | | `npm run spell-check` | 0 issues across 823 files | | `npm run validate:docs` | 10 suites, 101 tests passed | | `npm run lint:py` | All Python skills passed | | `npm run lint:tables` | Clean | | `git diff --check` | Clean | `Validate-DesignIntent.Tests.ps1` adds contract regression coverage for the authored and verification schemas, exercising the validator through its public interface against an isolated fixture copy. Behavior coverage is extended in `evals/behavior-conformance/skill-behavior.eval.yaml` and the agent behavior stimuli and expectations. `Build-AgentBehaviorSpec.ps1 -WhatIf` reports no drift, and the agent scenario set is unchanged. `main` is merged into this branch as of `a228328a`, and CI is green on that head: 108 checks pass, 0 failures, 0 blocking eval assertions. Link checking is covered by the CI link-validation lane; the `validate:local` aggregate that includes `lint:md-links` is being run locally to close the remaining checklist entries. * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [x] Tests added for new functionality (if applicable) * [x] Used `hve-builder` review mode to review contribution * [x] Addressed all actionable findings from the `hve-builder` review * [x] Verified contribution follows common standards and type-specific requirements The following local-safe validation commands must pass before merging: * [ ] Local validation aggregate: `npm run validate:local` * [x] Documentation validation (if docs changed): `npm run validate:docs` * [x] Spell checking: `npm run spell-check` * [ ] Link validation: `npm run lint:md-links` * [x] This PR does not contain any sensitive or NDA information * [ ] Any new dependencies have been reviewed for security issues * [x] Security-related scripts follow the principle of least privilege No dependencies were added or changed. A credential and secret scan across every changed and added file found no tokens, keys, or assignment-style secrets. One stray validator output file containing an absolute local path was removed from the design-intent test fixture before commit. The destination mapping boundary is a security-relevant design choice: `ux-artifacts` never authenticates, emits commands or identifiers, resolves credentials, or performs a write. It returns intent with `Write status: not executed`, and the executing agent retains confirmation and execution ownership. Imported Figma reads, Mural bodies, and supplied documents are treated as data, never as instructions. This is a large PR spanning four related areas that share regenerated aggregates. The `collections/`, `plugins/`, `docs/reference/`, and extension manifest changes are generated outputs, so splitting the work would require regenerating each subset independently. Two items are deliberately out of scope. Native Figma and Mural execution is not implemented and no external-write behavior is claimed anywhere in the artifacts. Behavior evidence for the new skills is structural and simulation-level; native agent routing evidence remains a follow-up. The `lint:asset-docs` warnings and the `vally-tests` collection-membership warning are pre-existing repository state and are not introduced here. 🎨 - Generated by Copilot
…-primary coach jobs (microsoft#2612) # Pull Request ## Description Consolidates the Data Science workstream from an agent-primary surface into a skill-primary one governed by `data-workstream-coach`. The five Data Science specialist agents delegated work that either belongs to a skill (durable, reusable conventions) or is already served by built-in VS Code Copilot tooling (notebook and dashboard scaffolding). Research confirmed the durable capability in those agents was authoring convention, not orchestration, so it is absorbed into skills and the retired agent surfaces are dropped rather than rehomed. ### Retired agents Removes five specialist agents under `.github/agents/data-science/`: * `eval-dataset-creator` * `gen-data-spec` * `gen-jupyter-notebook` * `gen-streamlit-dashboard` * `test-streamlit-dashboard` ### New skills * `ds-analysis-authoring` — EDA notebook sequencing and analytical dashboard authoring conventions, including a plot-selection table, axis-scale thresholds, `cache_data` versus `cache_resource` guidance, and interaction latency budgets. * `ds-evaluation-design` — evaluation dataset design for AI systems, including an interview and review protocol, metric selection, provenance requirements, and a dataset contract template. It sets a 30-pair floor and a category distribution with a per-category floor, and deliberately does not freeze an evaluator catalog. ### Extended skills * `ds-catalog` gains dataset profile contract coverage. * `ds-dataops` gains persistence and versioning coverage. ### Coach and registry * `data-workstream-coach` reduces its `agents:` frontmatter from six entries to one (`Experiment Designer`), and now states that coaching governs decision ownership rather than abstention from producing work. * The job registry replaces the `analysis` job target with `ds-analysis-authoring`, adds an `evaluation` job routed to `ds-evaluation-design`, and moves from five-skill to seven-skill boundaries. ### Catalog and evals * `marketplace.json` updates the `data-science` and `hve-core-all` packages to the new membership, with matching component maturity across both packages. * Behavior conformance stimuli, expectations, and surface signatures for the retired agents are removed; sixteen skill stimuli cover the new and extended surfaces. ## Related Issue(s) Closes microsoft#2610 ## Type of Change Select all that apply: **Code & Documentation:** * [ ] Bug fix (non-breaking change fixing an issue) * [x] New feature (non-breaking change adding functionality) * [x] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [x] Copilot agent (`.github/agents/*.agent.md`) * [x] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [x] Eval spec added/updated for changed AI artifacts (`evals/`) **Other:** * [ ] Script/automation (`.ps1`, `.sh`, `.py`) * [x] Other: marketplace package membership and component maturity ## Sample Prompts (for AI Artifact Contributions) **User Request:** "Help me build an evaluation dataset for our retrieval-augmented support assistant." **Execution Flow:** 1. `data-workstream-coach` matches the request to the `evaluation` job in the job registry. 2. The registry routes the job to `ds-evaluation-design`. 3. The skill runs its interview protocol to establish the system boundary, failure modes, and success criteria. 4. It applies the category distribution and per-category floor to size the dataset, then selects metrics against the declared failure modes. 5. It emits the dataset contract and supporting documents, recording provenance for every pair. **Output Artifacts:** An evaluation dataset contract from `templates/evaluation-dataset-contract.md`, covering system boundary, category distribution, metric selection with rationale, provenance, and review disposition. **Success Indicators:** The contract meets the 30-pair floor, every category satisfies its floor, each selected metric ties to a declared failure mode, and every pair carries provenance. ## Testing Local validation on the merged branch: * `npm run lint:marketplace` — pass * `npm run lint:plugin-output` — pass * `npm run validate:skills` — pass * `npm run lint:frontmatter` — pass * `npm run lint:md` — pass * `npm run lint:yaml` — pass * `npm run lint:json` — pass * `npm run lint:asset-docs` — pass Diff hygiene: * No date-only Markdown changes at any level. Staged (125 modified Markdown files), unstaged, and the full PR diff against `main` (35 modified Markdown files) each report zero date-only diffs. * `docs/reference/` pages are regenerated through `npm run docs:generate`; generated regions are not hand-edited. CI-owned lanes are deferred to this PR's checks rather than run locally: the eval lint lanes (`vally`, schema, text, safety), stimulus presence, changed-artifact execution, and content moderation. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [ ] Changes are backwards compatible (if applicable) (No: five Data Science agents are intentionally removed) * [x] Tests added for new functionality (if applicable) ### AI Artifact Contributions * [ ] Used `hve-builder` review mode to review contribution * [ ] Addressed all actionable findings from the `hve-builder` review * [x] Verified contribution follows common standards and type-specific requirements ### Required Local Checks The following local-safe validation commands must pass before merging: * [ ] Local validation aggregate: `npm run validate:local` (Targeted checks were run individually; the aggregate was not accepted as final evidence) * [ ] Documentation validation (if docs changed): `npm run validate:docs` (Docusaurus installation not current in this working tree) * [ ] Spell checking: `npm run spell-check` (Introduced findings were fixed; the repository-wide run has pre-existing failures from other in-flight work) * [ ] Link validation: `npm run lint:md-links` (Not accepted as final aggregate evidence) ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [ ] Any new dependencies have been reviewed for security issues (N/A: no dependency added) * [x] Security-related scripts follow the principle of least privilege ## Additional Notes * This branch merges current `origin/main`, including the immutable-snapshot packaging migration from microsoft#2577. The `collections/` and `plugins/` trees deleted by that migration were accepted as deleted; package membership for this change lives solely in `.github/plugin/marketplace.json`. * Three open PRs touch adjacent surfaces and may need ordering against this one: microsoft#2578 (eval guide consolidation, which documents the retired `eval-dataset-creator`), microsoft#2602 (collection topology), and microsoft#2599 (artifact portability). * Post-implementation review recorded a conformant outcome with zero defects and three low-severity observations, none blocking. --------- Co-authored-by: Jamie Kim <jamiekim500@gmail.com>
…s-voiceover, and mural (microsoft#2687) # Pull Request ## Description Remediates CVEs found in transitive dependencies across three skills: • powerpoint: Pillow (unbound) resolved to vulnerable 12.2.0 (CVE-2026-54058/54059/54060/55379/55798/59199/59205); pinned to >=12.3.0,<13.0 . • tts-voiceover: same Pillow CVEs (transitive via python-pptx ), plus cryptography@49.0.0 (CVE-2026-69247, Bleichenbacher oracle in PKCS7 decrypt, transitive via azure-identity / msal / pyjwt[crypto] ); both pinned ( Pillow>=12.3.0,<13.0 , cryptography>=50.0.0,<51.0 ). • mural: same cryptography@49.0.0 CVE-2026-69247, transitive via keyring → secretstorage on Linux; pinned to cryptography>=50.0.0,<51.0 . All three pins follow the repo's existing bounded/reviewed pattern (matching powerpoint 's pymupdf pin), with quarterly-review-policy comments. Also normalized Pillow → pillow casing in pyproject.toml to match PEP 503-normalized lockfile naming. ## Related Issue(s) Related to microsoft#2517 This does **not** close microsoft#2517: the Scorecard finding also lists `GHSA-5p2g-fcmc-qvqq` / `GHSA-w3rx-r6r6-pgpr` (`image-size@2.0.2`, transitively pulled in via `@docusaurus/core`), which has **no upstream fix published yet** (latest `image-size` release on npm is still `2.0.2`, and the advisory-recommended `2.0.3` was never published — confirmed via web search). That vulnerability is already tracked separately in microsoft#2283 and remains open until `image-size` ships a patched release. ## Type of Change Select all that apply: **Code & Documentation:** * [ ] Bug fix (non-breaking change fixing an issue) * [ ] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [ ] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [x] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot agent (`.github/agents/*.agent.md`) * [ ] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) **Other:** * [ ] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Testing * `uvx pip-audit` in both `powerpoint` and `tts-voiceover` skills now reports **"No known vulnerabilities found"** (previously 7 high-severity findings each for Pillow). * `uv run pytest -q`: `powerpoint` — 800 passed, 2 skipped; `tts-voiceover` — 40 passed. No regressions from the Pillow bump. * `npm run validate:skills`: all 62 skills pass with 0 errors/warnings. * Manually ran both skills' real `scripts/embed_audio.py` CLIs end-to-end against freshly generated `.pptx`/`.wav` fixtures (exercising the actual `PIL.Image` code path used to synthesize the embedded audio-icon PNG). Both succeeded, confirmed `PIL.__version__ == 12.3.0` in each skill's venv, and verified the output decks contain valid embedded MEDIA shapes. * Confirmed via `git stash` that an unrelated pre-existing `ValueError` in `tts-voiceover/scripts/generate_voiceover.py --help` (argparse `%`-formatting bug in help text) exists on `main` prior to this change and is out of scope here. * mural • uvx pip-audit (via uv export --format requirements-txt ): 0 known vulnerabilities. • uv run pytest -q : 804 passed, 121 skipped. • uv lock --check : lockfile in sync with pyproject.toml . • npm run validate:skills : mural passes (62/62 overall). • Runtime smoke test: imported cryptography , keyring , and scripts.mural._credentials to confirm the keyring → secretstorage → cryptography chain loads correctly at cryptography==50.0.0 . ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) — N/A, no documentation changes required * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [x] Tests added for new functionality (if applicable) — N/A, dependency version bump only; existing test suites re-validated ### AI Artifact Contributions * [ ] Used `hve-builder` review mode to review contribution * [ ] Addressed all actionable findings from the `hve-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Local Checks * [x] Local validation aggregate: `npm run validate:local` — not run in full (dependency-only change scoped to two skills); ran targeted equivalents instead (`uv run pytest`, `uvx pip-audit`, `npm run validate:skills`) covering the changed files * [ ] Documentation validation (if docs changed): `npm run validate:docs` * [ ] Spell checking: `npm run spell-check` * [ ] Link validation: `npm run lint:md-links` ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues — Pillow 12.3.0 is the latest published release and fixes all 7 CVEs present in 12.2.0 * [x] Security-related scripts follow the principle of least privilege ## Additional Notes Scope was limited to the two skills flagged by Scorecard/OSV as depending on vulnerable Pillow. The remaining `image-size` finding under the same Scorecard alert (microsoft#2517) is unrelated to Pillow, has no available upstream fix, and is tracked separately in microsoft#2283 — so microsoft#2517 should stay open until that is resolved. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Bill Berry <WilliamBerryiii@users.noreply.github.com>
…ng CI (microsoft#2702) # Pull Request ## Description `docs/docusaurus` transitively depended on `nanoid@3.3.17` (via `postcss`), which is vulnerable to [GHSA-2v37-7h3g-55p8](GHSA-2v37-7h3g-55p8): `customAlphabet`/`customRandom` loop indefinitely when given `size=0`, causing a denial-of-service. This advisory was failing PR CI pipelines. Added a `nanoid: 3.3.18` entry to the existing `overrides` block in `docs/docusaurus/package.json` (same pattern as other pinned overrides) and regenerated `package-lock.json`. ## Related Issue(s) Fixes microsoft#2701 ## Type of Change Select all that apply: **Code & Documentation:** * [x] Bug fix (non-breaking change fixing an issue) * [ ] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [ ] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [x] DevContainer configuration * [x] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot agent (`.github/agents/*.agent.md`) * [ ] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) **Other:** * [ ] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Testing * `cd docs/docusaurus && npm install` - lockfile regenerated, nanoid resolved to 3.3.18 * `npm run docs:test` - 10 test suites, 101 tests, all passed * `npm run docs:build` - production build completed successfully * `npm audit` (in `docs/docusaurus`) - GHSA-2v37-7h3g-55p8 no longer reported (17 unrelated pre-existing `@docusaurus/*` advisories remain, out of scope) ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [ ] Tests added for new functionality (if applicable) ### Required Local Checks * [x] Local validation aggregate: `npm run validate:local` * [x] Documentation validation (if docs changed): `npm run validate:docs` * [ ] Spell checking: `npm run spell-check` * [ ] Link validation: `npm run lint:md-links` ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues * [x] Security-related scripts follow the principle of least privilege ## Additional Notes Patch-level bump only (3.3.17 -> 3.3.18), no breaking changes expected or observed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…microsoft#2685) # Pull Request ## Description Fixes `npm run lint:dependency-pinning` (and 10 sibling npm scripts) intermittently failing on Windows PowerShell hosts due to fragile `pwsh -NoProfile -Command "& '...'"` quoting. The nested single/double quotes in the `-Command` payload can be mis-parsed by the host shell (`cmd.exe` on Windows), causing the script to abort mid-execution even though the underlying `.ps1` logic reports 100% compliance when invoked directly. Converted all affected npm scripts to the `pwsh -NoProfile -File ...` invocation form, which avoids the nested-quoting layer entirely and matches the convention already used by the majority of `pwsh` scripts in `package.json`. No `.ps1` script logic was changed — only the shell invocation shape. Left `clean:logs` and `ci:eval:agent:changed` on `-Command`, since both use pipelines/dynamic expressions that aren't expressible as a single `-File` script call. Also updated one documentation example (`scripts/linting/README.md`) that quoted the old `-Command` invocation verbatim for `lint:ai-artifacts`. ## Related Issue(s) Fixes microsoft#1489 ## Type of Change Select all that apply: **Code & Documentation:** * [x] Bug fix (non-breaking change fixing an issue) * [ ] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [x] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot agent (`.github/agents/*.agent.md`) * [ ] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Contributions **MUST** target models listed in the model catalog (`scripts/linting/model-catalog.json`) whose provider appears in `providerAllowlist` and whose status is `ga` or `preview`. Run `npm run lint:models` to validate references. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [ ] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Sample Prompts (for AI Artifact Contributions) <!-- Not applicable: no AI artifacts (.instructions.md, .prompt.md, .agent.md, SKILL.md) were changed in this PR. --> ## Testing * `npm run lint:dependency-pinning` — exit 0, 100% compliance (675 dependencies, 0 unpinned). * Ran each of the 11 modified npm scripts individually — all exit 0 with expected output: `lint:links`, `lint:frontmatter`, `lint:version-consistency`, `lint:permissions`, `lint:dangerous-workflow`, `lint:dependency-pinning`, `lint:pr-gate`, `lint:ai-artifacts`, `validate:devcontainer-lockfile`, `validate:skills`, `validate:ai-artifacts`. * Ran all 11 scripts chained together in `validate:local`'s order — exit 0, no regressions. * `npm run lint:tables` — passes after the README.md edit (table formatting intact). * Verified `package.json` remains valid JSON (`node -e "JSON.parse(...)"`). * Confirmed CI workflows invoke the underlying `.ps1` scripts directly via parameter splatting (not through this npm `-Command` wrapper), so this change has no effect on CI and only affects local `npm run` invocations. * Root cause not reproducible on this Linux devcontainer (pwsh 7.6.4 exits 0 under both `-Command` and `-File`); the reported failure is specific to Windows PowerShell hosts per the issue. The `-File` fix was validated by direct invocation working correctly both here and as documented by the issue reporter. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [ ] Tests added for new functionality (if applicable) (N/A — invocation-shape fix only, no new script logic to test) ### AI Artifact Contributions <!-- Not applicable: no AI artifacts changed in this PR. --> ### Required Local Checks The following local-safe validation commands must pass before merging: * [x] Local validation aggregate: `npm run validate:local` (ran the 11 modified scripts individually and chained; full aggregate also exercised `lint:ps`/`lint:md` unaffected by this change) * [ ] Documentation validation (if docs changed): `npm run validate:docs` * [ ] Spell checking: `npm run spell-check` * [ ] Link validation: `npm run lint:md-links` ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues (N/A — no dependency changes) * [x] Security-related scripts follow the principle of least privilege (invocation shape only; script logic and permissions unchanged) ## Additional Notes Three remediation options were proposed in the issue. This PR implements Option 1 (preferred): switch to `-File`. Option 2 (diagnose the `-Command` host defect) was not pursued because it requires a Windows PowerShell host to reproduce and the root cause lives at the shell-invocation layer rather than in script logic. Option 3 (append `; exit $LASTEXITCODE`) was rejected per the issue's own guidance that it masks the symptom, and likely wouldn't help regardless since the reporter's log shows the process aborting mid-script rather than completing with a discarded exit code. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Bill Berry <WilliamBerryiii@users.noreply.github.com> Co-authored-by: Jamie Kim <jamiekim500@gmail.com>
microsoft#2668) # Pull Request ## Description Fixes the devcontainer's `UV_DEFAULT_INDEX` default so it matches uv's own canonical index spelling, restoring `uv sync --locked` for the moderation eval restore. Codespaces supplies the canonical PyPI URL with a trailing slash, while the committed lock records it without one. `uv sync --locked` treats those equivalent index spellings as different lock inputs and aborts container creation. The resulting `onCreateCommand` failure sends both new Codespaces and rebuilt Codespaces into recovery mode. **Root cause:** `.devcontainer/Dockerfile` was setting a default of `https://pypi.org/simple/` (trailing slash) for `UV_DEFAULT_INDEX`. Every committed `uv.lock` in the repo (moderation eval and all 12 `.github/skills/*` skills) records the registry as `https://pypi.org/simple` (no trailing slash) — which is uv's own built-in default when no index env var is set at all. Confirmed directly: unset both index env vars -> uv's own built-in default $ env -u UV_DEFAULT_INDEX -u PIP_INDEX_URL uv lock --dry-run No lockfile changes detected with the Dockerfile's old default (trailing slash) -> reproduces the failure $ env UV_DEFAULT_INDEX="https://pypi.org/simple/" uv sync --locked --dry-run The lockfile at `uv.lock` needs to be updated, but `--locked` was provided. with the trailing slash removed -> --locked succeeds $ env UV_DEFAULT_INDEX="https://pypi.org/simple" uv sync --locked --dry-run Would make no changes So the mismatch was self-inflicted by this repo's own devcontainer default, not an inherent Codespaces/PyPI behavior. ## Related Issue(s) Fixes microsoft#2665 ## Type of Change **Code & Documentation:** * [x] Bug fix (non-breaking change fixing an issue) * [ ] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [ ] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [x] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot agent (`.github/agents/*.agent.md`) * [ ] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) **Other:** * [x] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Testing * Rebuilt the Codespace and confirmed `onCreateCommand` completed in the normal Ubuntu container instead of recovery mode. * Ran `uv sync --frozen` and imported the moderation runtime dependencies. * Verified the lockfile checksum remained unchanged during the frozen restore. * Ran the moderation test suite: 10 tests passed. * Ran canonical `uv sync --locked --dry-run` with an index-clean environment. * Confirmed a deliberately drifted manifest is still rejected by locked validation. * Ran `npm run validate:local`. * Ran `npm run spell-check`. * Ran `npm run lint:md-links`. * Ran `npm run lint:public-dependency-feeds`. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [x] Tests added for new functionality (if applicable) ### AI Artifact Contributions * [ ] Used `hve-builder` review mode to review contribution * [ ] Addressed all actionable findings from the `hve-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Local Checks The following local-safe validation commands must pass before merging: * [x] Local validation aggregate: `npm run validate:local` * [ ] Documentation validation (if docs changed): `npm run validate:docs` * [x] Spell checking: `npm run spell-check` * [x] Link validation: `npm run lint:md-links` ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [ ] Any new dependencies have been reviewed for security issues * [ ] Security-related scripts follow the principle of least privilege ## Additional Notes Other approaches investigated: * Switching to --frozen instead of --locked, but would remove safeguards provided by --locked checking for stale * Regenerating the moderation lockfile under the Codespaces index setting changed only PyPI source URLs by adding a trailing slash. It did not change resolved dependencies and would move the mismatch to environments using the non-trailing-slash spelling. * Regenerating with the exact pinned `uv 0.10.8` and Python 3.11 toolchain did not produce a dependency-resolution change. * Testing a newer uv release still reproduced the index URL identity mismatch under `--locked`. * Keeping `--locked` for canonical CI validation continues to detect genuine manifest drift, while `--frozen` makes dev-container startup a non-mutating restore operation. This is the smallest validated fix found so far. Alternative fixes that preserve deterministic restores without depending on index URL spelling are welcome. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Bill Berry <WilliamBerryiii@users.noreply.github.com> Co-authored-by: Bill Berry <wberry@microsoft.com>
…microsoft#2684) # Pull Request ## Description Adds GitHub Copilot CLI (`copilot`) to the DevContainer **Default Tool Stack** section of `docs/customization/environment.md`. This tool was added to the DevContainer via the `ghcr.io/devcontainers/features/copilot-cli:1` feature in commit `10e7fd1` (PR microsoft#2673) and `.devcontainer/README.md` was updated at that time, but `docs/customization/environment.md` was not, leaving it stale. ## Related Issue(s) Fixes microsoft#2683 ## Type of Change **Code & Documentation:** * [x] Documentation update ## Testing * `npm run validate:docs` — passed (10 suites, 101 tests) * `npm run spell-check` — 0 issues found ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [ ] Tests added for new functionality (if applicable) — N/A, docs-only change ### AI Artifact Contributions Not applicable — this change only edits prose documentation (`docs/customization/environment.md`), not an instruction, prompt, agent, skill, or hook artifact, so `hve-builder` review was not run. ### Required Local Checks * [x] Documentation validation (if docs changed): `npm run validate:docs` * [x] Spell checking: `npm run spell-check` * [ ] Local validation aggregate: `npm run validate:local` — not run (full-repo aggregate out of scope for this docs-only single-line change) * [ ] Link validation: `npm run lint:md-links` — not run (full-repo scan out of scope; no links were added or modified in this change) ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues — N/A * [x] Security-related scripts follow the principle of least privilege — N/A ## Additional Notes Single-line addition, mirroring the existing `.devcontainer/README.md` entry for consistency. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jamie Kim <jamiekim500@gmail.com> Co-authored-by: Bill Berry <WilliamBerryiii@users.noreply.github.com>
… with 4 updates (microsoft#2695) Bumps the npm-dependencies group with 1 update in the / directory: @microsoft/vally-cli. Bumps the npm-dependencies group with 3 updates in the /docs/docusaurus directory: [@happy-dom/jest-environment](https://github.com/capricorn86/happy-dom), [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) and [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser). Updates `@microsoft/vally-cli` from 0.11.0 to 0.13.0 Updates `@happy-dom/jest-environment` from 20.11.1 to 20.11.2 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/capricorn86/happy-dom/releases">@happy-dom/jest-environment's releases</a>.</em></p> <blockquote> <h2>v20.11.2</h2> <h3>:construction_worker_man: Patch fixes</h3> <ul> <li>MutationObserver callback being GC'd due to orphaned WeakRef - By <strong><a href="https://github.com/mixelburg"><code>@mixelburg</code></a></strong> in task <a href="https://redirect.github.com/capricorn86/happy-dom/issues/2264">#2264</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/capricorn86/happy-dom/commit/576a8bcf8cc7857428955ec14bebb768855eaf95"><code>576a8bc</code></a> fix: <a href="https://redirect.github.com/capricorn86/happy-dom/issues/2264">#2264</a> MutationObserver callback being GC'd due to orphaned WeakRef (<a href="https://redirect.github.com/capricorn86/happy-dom/issues/2">#2</a>...</li> <li><a href="https://github.com/capricorn86/happy-dom/commit/084afd6773bedc99903e04a693b69b7eb375dec6"><code>084afd6</code></a> chore: <a href="https://redirect.github.com/capricorn86/happy-dom/issues/2251">#2251</a> Updates the contribution guidelines (<a href="https://redirect.github.com/capricorn86/happy-dom/issues/2252">#2252</a>)</li> <li>See full diff in <a href="https://github.com/capricorn86/happy-dom/compare/v20.11.1...v20.11.2">compare view</a></li> </ul> </details> <br /> Updates `@testing-library/jest-dom` from 7.0.0 to 7.0.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/testing-library/jest-dom/releases">@testing-library/jest-dom's releases</a>.</em></p> <blockquote> <h2>v7.0.1</h2> <h2><a href="https://github.com/testing-library/jest-dom/compare/v7.0.0...v7.0.1">7.0.1</a> (2026-08-09)</h2> <h3>Bug Fixes</h3> <ul> <li>declare vitest as an optional peer dependency (<a href="https://redirect.github.com/testing-library/jest-dom/issues/733">#733</a>) (<a href="https://github.com/testing-library/jest-dom/commit/3782c78b3dc9824675afe0cb8f1722f8c96f494d">3782c78</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/testing-library/jest-dom/commit/3782c78b3dc9824675afe0cb8f1722f8c96f494d"><code>3782c78</code></a> fix: declare vitest as an optional peer dependency (<a href="https://redirect.github.com/testing-library/jest-dom/issues/733">#733</a>)</li> <li>See full diff in <a href="https://github.com/testing-library/jest-dom/compare/v7.0.0...v7.0.1">compare view</a></li> </ul> </details> <br /> Updates `@typescript-eslint/parser` from 8.65.0 to 8.66.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/typescript-eslint/typescript-eslint/releases">@typescript-eslint/parser's releases</a>.</em></p> <blockquote> <h2>v8.66.0</h2> <h2>8.66.0 (2026-08-03)</h2> <h3>🚀 Features</h3> <ul> <li><strong>typescript-estree:</strong> handle import.defer() as ImportExpression (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12609">#12609</a>)</li> </ul> <h3>🩹 Fixes</h3> <ul> <li><strong>eslint-plugin:</strong> [no-unnecessary-type-conversion] ignore shadowed built-ins (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12590">#12590</a>)</li> <li><strong>eslint-plugin:</strong> [prefer-nullish-coalescing] handle shadowed Boolean calls (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12591">#12591</a>)</li> <li><strong>eslint-plugin:</strong> [no-useless-default-assignment] don't report defaults used by other overloads (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12607">#12607</a>)</li> <li><strong>eslint-plugin:</strong> [no-unnecessary-type-parameters] check MappedType key remapping (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12588">#12588</a>)</li> <li><strong>eslint-plugin:</strong> [class-literal-property-style] preserve type annotations and don't drop decorators (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12617">#12617</a>)</li> <li><strong>website:</strong> list <code>onUnsupportedTypeScriptVersion</code> in parser options (<a href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12585">#12585</a>)</li> </ul> <h3>❤️ Thank You</h3> <ul> <li>Evyatar Daud <a href="https://github.com/StyleShit"><code>@StyleShit</code></a></li> <li>Kirk Waiblinger <a href="https://github.com/kirkwaiblinger"><code>@kirkwaiblinger</code></a></li> <li>Steffen Schroeder</li> <li>송재욱</li> </ul> <p>See <a href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.66.0">GitHub Releases</a> for more information.</p> <p>You can read about our <a href="https://typescript-eslint.io/users/versioning">versioning strategy</a> and <a href="https://typescript-eslint.io/users/releases">releases</a> on our website.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md">@typescript-eslint/parser's changelog</a>.</em></p> <blockquote> <h2>8.66.0 (2026-08-03)</h2> <p>This was a version bump only for parser to align it with other projects, there were no code changes.</p> <p>See <a href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.66.0">GitHub Releases</a> for more information.</p> <p>You can read about our <a href="https://typescript-eslint.io/users/versioning">versioning strategy</a> and <a href="https://typescript-eslint.io/users/releases">releases</a> on our website.</p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/e51b11ba3ab31837762c675f62f0d4dcb1abc4fb"><code>e51b11b</code></a> chore(release): publish 8.66.0</li> <li>See full diff in <a href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.66.0/packages/parser">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jamie Kim <jamiekim500@gmail.com> Co-authored-by: Bill Berry <WilliamBerryiii@users.noreply.github.com>
…bility (microsoft#2674) # Pull Request ## Description Convert `model:` frontmatter from a YAML array to a scalar string in 5 subagent files so they load correctly under the Copilot CLI. VS Code Copilot Chat accepts a `model` array for fallback, but the Copilot CLI's frontmatter parser rejects it (`model: Expected string, received array`) and silently drops the agent, making it unavailable. Tracked upstream in [github/copilot-cli#2133](github/copilot-cli#2133). Following review feedback (jkim323), this PR now also: * Closes the validation gap that let array-form `model` regress silently on `.agent.md` files. * Reconciles the hve-builder governing docs, which previously mandated an ordered three-model fallback array for all artifacts, with the new scalar-only rule for agents/subagents (prompts keep the ordered fallback list). * Runs the affected artifacts through `hve-builder` review mode and resolves all findings. ## Related Issue(s) Fixes microsoft#2066 ## Type of Change **Code & Documentation:** * [x] Bug fix (non-breaking change fixing an issue) * [ ] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [x] Linting configuration (markdown, PowerShell, etc.) * [ ] GitHub Actions workflow * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [x] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [x] Copilot agent (`.github/agents/*.agent.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) **Other:** * [ ] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Testing **Validation gap fix** (schema + validator + tests): * `scripts/linting/schemas/agent-frontmatter.schema.json`: `model` is now `type: string` only for `.agent.md`. * `scripts/linting/Test-ModelReferences.ps1`: added `Test-ModelValueIsArray`; array-form `model` on `.agent.md` now fails validation. `.prompt.md` array behavior is unchanged. * `scripts/tests/linting/Test-ModelReferences.Tests.ps1`: added coverage for the new agent-only restriction; existing array-model fixtures moved to `.prompt.md` context where the array form is still valid. **Governing docs reconciled**: `hve-builder.instructions.md`, `requirements-catalog.md`, `artifact-types.md`, `review-rubric.md` now state agents/subagents use a single canonical scalar per responsibility profile (High = `Claude Opus 5 (copilot)`, Medium = `GPT-5.6 Terra (copilot)`, Low = `GPT-5.6 Luna (copilot)`), while prompts may still use the ordered three-model fallback list. **hve-builder review mode**: ran a static review across all 11 changed files (5 agent files + 4 governing docs + 2 contributor-facing docs). Findings: `codebase-profiler.agent.md` and `report-generator.agent.md` were pinned to a non-canonical Low-tier model that didn't match their actual (Medium) responsibility — corrected to `GPT-5.6 Terra (copilot)`. `docs/contributing/custom-agents.md` and `docs/customization/custom-agents.md` had stale model/description contract language — rewritten. All findings resolved and closure-verified; final verdict Pass. Evidence: `.copilot-tracking/hve-builder/2026-08-12/subagent-model-scalar-review-1.md`. **Manual reproduction against the real Copilot CLI (v1.0.79)**: extracted the pre-fix array-model `codebase-profiler.agent.md` into an isolated `.github/agents/` directory and ran `copilot --agent "Codebase Profiler"` with debug logging — reproduced the exact reported failure (`custom agent markdown frontmatter is malformed: model: Expected string, received array`, agent absent from the available list). Re-ran with the post-fix scalar file — agent loaded and responded normally with no parse error. **Automated checks**: * `npm run lint:frontmatter` — 861/861 pass * `npm run lint:models` — 19/19 valid * `npm run lint:tables` — clean after `npm run format:tables` * `npx markdownlint-cli2` on all changed markdown files — 0 issues * `npm run test:ps -- -TestPath "scripts/tests/linting/"` — 1142/1142 pass ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [x] Tests added for new functionality (if applicable) ### AI Artifact Contributions * [x] Used `hve-builder` review mode to review contribution * [x] Addressed all actionable findings from the `hve-builder` review * [x] Verified contribution follows common standards and type-specific requirements ### Required Local Checks * [ ] Local validation aggregate: `npm run validate:local` (not run in full; ran targeted equivalents scoped to changed files instead — frontmatter, models, markdown lint, table format, and the linting Pester suite all pass; see Testing section) * [x] Documentation validation (if docs changed): markdown lint clean on all changed docs * [ ] Spell checking: `npm run spell-check` (not run) * [ ] Link validation: not run; no new links introduced in this diff ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues * [x] Security-related scripts follow the principle of least privilege ## Additional Notes Addresses all three points of reviewer feedback from jkim323: validation gap, governing-docs conflict, and hve-builder review-mode pass. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Bill Berry <WilliamBerryiii@users.noreply.github.com>
## Description Hardened the HVE Core installer across its remaining file, command, manifest, and source trust boundaries while preserving Bash and PowerShell parity. ### Installer scripts * Excluded `.git`, `.env` variants, `.DS_Store`, and `Thumbs.db` from copied and tracked skill files in both component-copy implementations. * Preserved newline-containing filenames in Bash by carrying component file plans through NUL-delimited temporary files. * Restricted extension validation to the `code` and `code-insiders` command names before execution. * Replaced the PowerShell ejection manifest through a same-directory temporary file and cleaned up temporary files after successful and failed operations. ### Installation guidance * Added an upstream `origin` check for mounted and multi-root source clones before collision detection or copying. * Documented accepted Microsoft HVE-Core HTTPS and SSH forms and required explicit confirmation when the origin is missing or unexpected, allowing intentional forks and local clones to continue. ### Regression coverage * Added focused coverage for copy exclusions, newline-containing filenames, CLI rejection before execution, temporary-file cleanup, failed manifest writes, and failed manifest replacement. ## Related Issue(s) Fixes microsoft#2663 ## Type of Change Select all that apply: **Code & Documentation:** * [x] Bug fix (non-breaking change fixing an issue) * [ ] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [ ] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot agent (`.github/agents/*.agent.md`) * [x] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) **Other:** * [x] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Sample Prompts (for AI Artifact Contributions) **User Request:** Install selected HVE Core components from an existing mounted or multi-root checkout. **Execution Flow:** 1. Select installation Method 3 or Method 5 and resolve `HveCoreBasePath`. 2. Read the source clone's `origin` before collision detection or copy operations. 3. Continue automatically for expected Microsoft HVE-Core origins, or warn and request explicit confirmation for a missing or unexpected origin. 4. Copy selected components with the existing containment, package-membership, schema, symlink, and collision checks. **Output Artifacts:** * Selected HVE Core components in the target workspace or user profile * Updated `.hve-tracking.json` entries for copied files * A warning and confirmation prompt when a pre-existing source has no expected upstream origin **Success Indicators:** * Excluded VCS, environment, and OS metadata files are absent from targets and tracking manifests. * Supported VS Code command names validate installed extensions; unsupported values fail before execution. * Newline-containing filenames remain one copied and tracked file on supported Unix hosts. * Interrupted PowerShell manifest updates leave the original manifest unchanged and no temporary file behind. ## Testing Implementation validation completed before PR generation: * Focused component-copy baseline: passed, with 54 tests passed and one platform-inapplicable test skipped. * Installer test directory: changed semantic suites passed; the package run reported 149 passed, one skipped, and one unrelated environment-fixture failure. * ShellCheck for changed Bash scripts: passed. * Repository PowerShell lint: passed. * Skill structure validation: passed for all 58 skills. * Documentation generation and drift check: passed with no generated delta. * Generated installer reference Markdown lint and editor diagnostics: passed. * Final diff checks: passed. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [x] Tests added for new functionality (if applicable) ### AI Artifact Contributions <!-- If contributing an agent, prompt, instruction, or skill, complete these checks --> * [ ] Used `hve-builder` review mode to review contribution * [ ] Addressed all actionable findings from the `hve-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Local Checks The following local-safe validation commands must pass before merging: * [x] Local validation aggregate: `npm run validate:local` * [x] Documentation validation (if docs changed): `npm run validate:docs` * [x] Spell checking: `npm run spell-check` * [ ] Link validation: `npm run lint:md-links` (skipped: N/A) ## Security Considerations * [x] This PR does not contain any sensitive or NDA information * [ ] Any new dependencies have been reviewed for security issues (N/A - no dependency changes) * [ ] Security-related scripts follow the principle of least privilege (N/A - no `scripts/security/` changes) ## GHCP Artifact Maturity | File | Type | Maturity | Notes | |--------------------------------------------------------|-------|----------|------------| | `.github/skills/installer/hve-core-installer/SKILL.md` | Skill | stable | All builds | ## Additional Notes The existing target-root containment implementation was intentionally left unchanged. The package-level Pester failure came from the unchanged detect-environment fixture observing the current devcontainer after clearing only selected marker variables; all changed semantic owners passed during implementation. Co-authored-by: Bill Berry <WilliamBerryiii@users.noreply.github.com>
…iews (microsoft#2691) ## Description Resolves the three tractable findings collected on issue microsoft#2645, which gathered review findings deferred from PR microsoft#2602. Each turned out to be smaller than its original framing suggested: the fix text already existed, or the infrastructure already existed, or the content already existed and had been deleted. ### 1. The dry-run path had no compliant record target Three statements in the backlog execution protocol could not all hold at once. Destination Binding required recording the verified binding in `handoff-logs.md` before the first mutation. Binding was required to run in dry run as well, so a simulated run exercises the same rejection path. And dry-run entries were forbidden from `handoff-logs.md`, because that file is the resume authority for live runs and must contain no simulated result. An implementer following the dry-run path had nowhere compliant to write. The rule now names two targets explicitly: a live run records in `handoff-logs.md`, a dry run records in `handoff-dryrun.md`. Both original intents survive. The ADO and Jira executor contracts each restated the rule in their own words, so both were updated; the GitHub executor was confirmed not to restate it and needed no change. ### 2. Generated backlog handoffs carried no human-review gate `backlog-execute` halts on any unchecked human-review checkbox, and states explicitly that absence of a gate is not an unchecked gate. The shared `handoff.md` template created only operation checkboxes, so a generated handoff passed straight through with nothing to halt on. The gate infrastructure already existed and is config-driven, so this is classification work rather than new gate design. The template gained a `## Human Review` section carrying the canonical AI-content note and an unchecked checkbox, kept separate from operation checkboxes so the two are never confused. The `human-facing` tier in `footer-with-review.yml` gained artifact basename `handoff` and the three backlog tracking-root scopes. **Classification alone was not enough, and this is the part most worth a reviewer's attention.** The validator could not discover a generated handoff at all. It enumerated only `*.instructions.md`, and its file walker honored `.gitignore`, which excludes `.copilot-tracking/` entirely. A direct run against a deliberately non-compliant fixture reported `Files scanned: 0` and exited green. Discovery in `Test-AIArtifactValidation` now enumerates markdown recursively, with a comment explaining that every scan path is caller-supplied. Without that change the gate would have been configured and would never have fired. The standing rule that no agent checks a human-review checkbox is preserved: the template ships the box unchecked, and the validator checks for presence rather than trusting an assertion. ### 3. A getting-started page promised a migration map that did not exist Four package identities were retired with no single table mapping them to replacements. The mapping had been authored and deleted inside PR microsoft#2602 and never reached `main`, while `cli-plugins.md` continued to link to a guide that did not contain it. `package-migration.md` gained a `## Retired Package Identities` section covering four retired extension identities, eleven read-only command replacements, five mutation command replacements, two absorbed commands, two relocated commands, three relocated skills, seven retired agents, and three behaviors that got wider under runtime tracker resolution. The non-obvious two-extension `hve-github` row is preserved and explained, since its skills split across two packages. The inbound link now targets the specific section anchor. ## Related Issue(s) Refs microsoft#2645 This PR does **not** close microsoft#2645. Seven of its ten items remain open by design: four are genuine design work (audit-record schema, data governance for tracking artifacts, the triage-to-execution handoff contract, and idempotency for mutating operations), and three are pending decisions. The issue body has been updated so items 5, 7, and 9 appear under a branch-scoped Resolved section while the rest stay open with their original numbering. ## Type of Change Select all that apply: **Code & Documentation:** * [x] Bug fix (non-breaking change fixing an issue) * [ ] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [ ] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [x] Copilot agent (`.github/agents/*.agent.md`) * [x] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [ ] Eval spec added/updated for changed AI artifacts (`evals/`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Contributions **MUST** target models listed in the model catalog (`scripts/linting/model-catalog.json`) whose provider appears in `providerAllowlist` and whose status is `ga` or `preview`. Run `npm run lint:models` to validate references. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [x] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Sample Prompts (for AI Artifact Contributions) **User Request:** > Plan the backlog work for this milestone and give me a dry run before anything is created. **Execution Flow:** 1. `backlog-plan` resolves the platform, builds the planning files, and assembles `handoff.md` from the shared template in `backlog-management/references/workflows.md`. 2. Assembly now emits a `## Human Review` section with its checkbox unchecked. The agent never checks it. 3. `backlog-execute` inspects the handoff before processing. The unchecked checkbox halts it and reports the artifact path and the specific unchecked item. 4. A human reviews the planned operations and checks the box. 5. On re-run, execution proceeds. Destination Binding hydrates every target, compares it to the normalized confirmed destination, and rejects the whole set on any mismatch. It records the verified binding in `handoff-logs.md` for a live run, or in `handoff-dryrun.md` for a dry run. **Output Artifacts:** `handoff.md` now ends with: ```markdown ## Human Review This section is the execution gate. It is not an operation checkbox, and execution halts while the box below is unchecked. Only a human may check it. > **Note** — The author created this content with assistance from AI. All outputs should be reviewed and validated by a qualified human reviewer before use. > - [ ] Reviewed and validated by a qualified human reviewer ``` **Success Indicators:** * A freshly generated handoff contains the Human Review section with an unchecked box. * `backlog-execute` refuses to process that handoff and names the unchecked item. * Running the validator against the containing tracking directory reports a failure before the box is added and passes after: ```powershell pwsh scripts/linting/Validate-PlannerArtifacts.ps1 -Paths '.copilot-tracking/github-issues/<scope>' -FailOnMissing ``` * A dry run writes its binding record to `handoff-dryrun.md` and leaves `handoff-logs.md` untouched. > [!NOTE] > Human review is recommended for agent-populated Sample Prompts content. For detailed contribution requirements, see: * Common Standards: [docs/contributing/ai-artifacts-common.md](../docs/contributing/ai-artifacts-common.md) - Shared standards for XML blocks, markdown quality, RFC 2119, validation, and testing * Agents: [docs/contributing/custom-agents.md](../docs/contributing/custom-agents.md) - Agent configurations with tools and behavior patterns * Prompts: [docs/contributing/prompts.md](../docs/contributing/prompts.md) - Workflow-specific guidance with template variables * Instructions: [docs/contributing/instructions.md](../docs/contributing/instructions.md) - Technology-specific standards with glob patterns * Skills: [docs/contributing/skills.md](../docs/contributing/skills.md) - Task execution utilities with cross-platform scripts ## Testing ### Automated validation | Check | Result | |-------|--------| | `npm run test:ps -- -TestPath "scripts/tests/linting/Validate-PlannerArtifacts.Tests.ps1"` | Passed. 42 tests, 0 failed, up from 36 before this change. | | `npm run validate:local` | Exited 1 at `lint:md-links` on a file not in this PR. See note below. | | `npm run spell-check` | Passed. 807 files, 0 issues. | | `npm run lint:md-links` | Every link in this PR's changed files resolved. | | `npm run docs:generate:check` | Passed, exit 0. | | `npm run lint:ai-artifacts` | Passed. 63 files, 0 issues. | The `validate:local` failure is a transient network fault, not a defect. All four external links in `.github/skills/project-planning/requirements-author/references/prd/product-discovery.md` reported `Status: 0`, which is a connection failure rather than a 404. One of them, the Creative Commons license URL, had succeeded moments earlier in a different file within the same run. All four return `200` on retry. That file is not part of this PR. Every other stage of the aggregate passed: plugin output, tables, markdown, PowerShell analyzer, YAML, and JSON. ### Test coverage added A new `Describe 'Backlog handoff classification'` block in `Validate-PlannerArtifacts.Tests.ps1` runs against the **real repository footer config** rather than a synthetic fixture, so the shipped classification is what gets proven. Four `It` blocks yield six executed cases: * Three scope-classification cases, one per backlog tracking root, asserting the `human-facing` tier and the required `human-review-checkbox` footer. * A missing-checkbox case asserting failure. * A present-checkbox case asserting a clean pass. * An end-to-end discovery case proving a suffix-less `handoff.md` is found at all, which is the regression that would otherwise silently return. ### Diff-based assessment * No public API or behavior surface removed; template and config changes are additive. * All paths referenced in changed content resolve, including the new `#retired-package-identities` anchor. * Every changed file maps to a bullet in the commit message. * Marketplace maturity confirmed `stable` for all three changed AI artifact sources via `Get-MarketplaceSourceMaturity`. ### Manual testing Not performed. Validation was automated plus diff-based assessment. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [x] Tests added for new functionality (if applicable) ### AI Artifact Contributions <!-- If contributing an agent, prompt, instruction, or skill, complete these checks --> * [ ] Used `hve-builder` review mode to review contribution * [ ] Addressed all actionable findings from the `hve-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Local Checks The following local-safe validation commands must pass before merging: * [ ] Local validation aggregate: `npm run validate:local` (failed on a transient external-link fault in a file outside this PR; all other stages passed) * [ ] Documentation validation (if docs changed): `npm run validate:docs` * [x] Spell checking: `npm run spell-check` * [x] Link validation: `npm run lint:md-links` (every link in this PR's changed files resolved) ## Security Considerations <!--⚠️ WARNING: Do not commit sensitive information such as API keys, passwords, or personal data --> * [x] This PR does not contain any sensitive or NDA information * [ ] Any new dependencies have been reviewed for security issues (N/A — no dependency changes in this PR) * [ ] Security-related scripts follow the principle of least privilege (N/A — no files under `scripts/security/` were modified) ## GHCP Artifact Maturity | File | Type | Maturity | Notes | |-------------------------------------|-------|----------|------------| | `ado-backlog-executor.agent.md` | Agent | ✅ stable | All builds | | `jira-backlog-executor.agent.md` | Agent | ✅ stable | All builds | | `backlog-management` (skill) | Skill | ✅ stable | All builds | No non-stable artifacts are included. ## Additional Notes ### Two things a reviewer should decide, not merge blindly **The new gate applies to dry runs too.** `backlog-execute` halts on any unchecked review checkbox before processing a handoff, and the template now always emits one. A dry run is exactly what someone would reach for to inspect a handoff *before* approving it, so preview now requires the approval first. That may well be intended, since the gate is deliberately unconditional and an agent must never check the box. It is called out here because the planning artifacts do not record that the interaction was considered. Exempting dry run would be a `backlog-execute` contract change and belongs in its own change. **No automated lane ever scans a generated handoff.** `.copilot-tracking/` is gitignored, so no handoff is ever committed for CI to see, and `lint:ai-artifacts` defaults to `.github/instructions`. The classification, the discovery fix, and the tests are all correct, but practical enforcement rests on the `backlog-execute` halt rule at execution time rather than on CI. Worth knowing before treating "the validator enforces it" as CI coverage. A committed template-shaped fixture would be the only way to close that gap. ### Scope notes * The "Copilot skill" box is checked because this materially changes `backlog-management` behavior, though the edits are in the skill-owned `references/workflows.md` rather than `SKILL.md` itself. * The validator discovery change widens enumeration and no longer honors `.gitignore` for caller-supplied paths. This is deliberate and commented, since the artifacts it must reach live under an ignored directory. It is worth knowing if a future caller ever points `-Paths` at a repository root. * Generated reference pages under `docs/reference/` are intentionally untouched. The two changed executor agents carry no agent body text in their generated pages, so regeneration produced only an `ms.date` frontmatter bump across all 230 pages. That churn is unrelated to this work and was reverted; `npm run docs:generate:check` exits 0.
…urity-planning (microsoft#2574) Adds deterministic Microsoft Threat Modeling Tool (`.tm7`) generation and a native validation harness to the `security-planning` skill, so a threat model authored as a declarative spec becomes a model TMT can open, laid out legibly, without hand-building diagrams. The skill previously produced threat-model content as prose. It could not emit a `.tm7` that opens cleanly, lays out readably, and can be validated without a human driving the tool by hand. What lands: * **Generation.** `generate_tm7.py` builds a `.tm7` from a YAML spec: one diagram surface per scope, trust-boundary rectangles containing their nodes, and data flows between them. `generate_markdown.py` renders the same spec as a markdown report. `generate_tb7.py` emits a template. * **Layout.** Text-aware node sizing, gutter spacing scaled to node size, and containment-preserving placement so nodes stay inside their owning trust boundary. Output is deterministic under input reordering: GUIDs derive from stable spec identifiers rather than randomness, and members serialize in canonical order. * **Validation harness.** `validate_tm7_with_tmt.py` drives native TMT through UI Automation, captures per-surface geometry metrics and pane-scoped screenshots, and writes a redacted evidence bundle with a schema-versioned manifest. Windows-only and opt-in; portable generation does not require TMT. * **Layout overlay.** A schema for reproducible manual layout adjustments, guarded by three fingerprints (spec, generator profile, surface identity) so a stale overlay is rejected rather than silently replayed onto a changed model. Overlays are always emitted `approval_state: pending`; no runtime path promotes them to approved. * **Threat-model spec under version control.** `docs/planning/threat-models/hve-core-comprehensive.yaml` is hve-core's own spec, previously living only in gitignored working state. Generated `.tm7` and markdown outputs are build artifacts and are deliberately not committed. Agent and instruction changes route the capability: the security planner and reviewer gain a TM7 workflow requiring explicit human confirmation before a generated model is treated as authored, plus an operator hands-off contract that stops and waits for confirmation before the UI automation run takes over mouse and keyboard. `identity.instructions.md` establishes the spec as source of truth with markdown rendered from it, so the model is edited at the spec and re-rendered rather than edited in the rendered artifact. Closes microsoft#2567 Select all that apply: **Code & Documentation:** * [ ] Bug fix (non-breaking change fixing an issue) * [x] New feature (non-breaking change adding functionality) * [ ] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [ ] Linting configuration (markdown, PowerShell, etc.) * [x] Security configuration * [ ] DevContainer configuration * [x] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `hve-builder` and addressed all actionable findings * [x] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [x] Copilot agent (`.github/agents/*.agent.md`) * [x] Copilot skill (`.github/skills/*/SKILL.md`) * [ ] Copilot hook (`.github/hooks/*/*.json`) * [x] Eval spec added/updated for changed AI artifacts (`evals/`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Contributions **MUST** target models listed in the model catalog (`scripts/linting/model-catalog.json`) whose provider appears in `providerAllowlist` and whose status is `ga` or `preview`. Run `npm run lint:models` to validate references. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [x] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): **User Request:** > Generate a TM7 threat model from our threat-model spec. **Execution Flow:** 1. The security planner loads the `security-planning` skill and reads `references/tm7-generation.md` for the input schema and generation modes. 2. The agent presents the input spec and asks the user to confirm scope and generation mode before running anything. 3. `generate_tm7.py` reads the spec, resolves a template profile, builds the model, and applies layout: nodes sized to their text, placed inside their owning trust boundary, spaced by a gutter proportional to node size. 4. The agent presents the generated model for explicit human confirmation. A generated model is never treated as authored or final without it. 5. If the user requests native validation and is on Windows with the pinned TMT version, the agent states the operator hands-off contract, waits for explicit confirmation that the desktop is clear, then runs the harness and reports the evidence bundle location. The harness emits notices but does not itself block, so this gate lives in agent behavior. **Output Artifacts:** A `.tm7` file (Microsoft `SerializableModelData` DataContract XML). First lines of a generated model: ```xml <?xml version='1.0' encoding='utf-8'?> <ThreatModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/ThreatModeling.Model"> <DrawingSurfaceList> <DrawingSurfaceModel> <Header>System context and trust boundaries</Header> ``` A native harness run additionally produces an evidence bundle: ```text <evidence-dir>/ manifest.json schema-versioned run metadata and per-surface metrics status.json exit state and last successful action action.log redacted human-auditable action trail screenshots/ pane-scoped renders, one per surface uia/ UI Automation traces iterations/00-baseline through iterations/03 overlay.json approval_state: pending ``` **Success Indicators:** The model opens in TMT without template-upgrade or repair prompts. Nodes render inside their trust boundaries. Regenerating from an unchanged spec produces byte-identical output. The harness exits 0 with `automated-ready-pending-human` and `gate_failure_count: 0`. * `uv run pytest tests/test_generate_tm7.py` — 185 tests, zero failures. Covers containment (nodes stay inside their owning zone), determinism under input reordering, node overlap, rank ordering, and lane separation across 8 layout archetypes. * Six further pytest modules cover template generation, threat population, the threat DataContract, visual-feedback geometry and convergence, and the TMT harness. Full suite: 517 passed. * `Deserialize-Tm7.ps1` checks generated models against TMT assemblies for round-trip fidelity. * `fuzz_harness.py` provides an Atheris polyglot entry point for OSSF Scorecard fuzzing. * Native harness executed end to end against TMT 7.3.51110.1 on Windows: exit code 0, zero gate failures, per-surface metrics and screenshots captured across 8 surfaces. * `uv run ruff check .` and `uv run ruff format --check .` — both clean across 14 files, matching the commands the owning CI lane runs. * [x] Documentation is updated (if applicable) * [x] Files follow existing naming conventions * [x] Changes are backwards compatible (if applicable) * [x] Tests added for new functionality (if applicable) * [ ] Used `hve-builder` review mode to review contribution * [ ] Addressed all actionable findings from the `hve-builder` review * [x] Verified contribution follows common standards and type-specific requirements The following local-safe validation commands must pass before merging: * [ ] Local validation aggregate: `npm run validate:local` * [ ] Documentation validation (if docs changed): `npm run validate:docs` * [ ] Spell checking: `npm run spell-check` * [ ] Link validation: `npm run lint:md-links` * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues * [x] Security-related scripts follow the principle of least privilege This PR adds an executable runtime to a skill that previously shipped only reference material, so the security surface is new. `SECURITY.md` in the skill carries the full STRIDE model over three trust buckets (TMT process automation and UI Automation, local screenshots and evidence, overlay manifest and path handling) with risk ratings and ten open enterprise-readiness gaps. Observed properties of the runtime: * No network egress. The runtime opens no sockets and imports no HTTP client. `urllib.parse` is imported for `urlsplit`/`urlunsplit`, used to strip credential-bearing query strings during evidence redaction; it performs no I/O. * XML parsing rejects `<!DOCTYPE` and `<!ENTITY` before parse and routes every reader through one hardened `defusedxml` boundary, closing the XXE path on specs, models, and templates. * Untrusted input is parsed with `yaml.safe_load` and `json.load` only. No `eval`, `exec`, `pickle`, or dynamic import. * The single subprocess launch targets a version-validated executable whose Authenticode signature must carry the accepted publisher CN, with stdout and stderr discarded. * Evidence paths are confined to the evidence directory, and sensitive-key and sensitive-value redaction is applied to every persisted text sink. * Screenshot capture is refused unless the host can isolate a single native window; where it cannot, no screenshot is written and a run requiring complete evidence fails closed. Captured pixels are never redacted and are not represented as such. * Overlays are emitted `approval_state: pending` and are never auto-promoted, so visual scores stay advisory rather than becoming silent approval. Dependencies added: `pyyaml==6.0.3` and `defusedxml==0.7.1` at runtime; `pytest`, `pytest-cov`, `ruff`, and `pillow` for development; `atheris` isolated in a `fuzz` group because macOS wheels are unavailable; `pywinauto` in a Windows-only group for UI Automation. `uv.lock` is committed so Dependabot resolves through the `.github/skills/**` glob. `THIRD-PARTY-NOTICES` records MIT attribution for the bundled Microsoft threat-modeling templates and for the tm7-cli sample fixture. **The committed threat-model spec is marked DRAFT and has not had human security review.** `docs/planning/threat-models/README.md` states this explicitly so neither the spec nor anything generated from it is mistaken for a reviewed artifact. **Generated models are intentionally not committed.** A `.tm7` for this repository is roughly 1.8 MB of XML, and any layout change rewrites geometry across every surface, so committing outputs would produce large unreviewable diffs on one-line source changes. The spec is the versioned source; `README.md` documents the regeneration command. **The native harness is Windows-only and opt-in.** It requires TMT 7.3.51110.1 and takes exclusive control of mouse and keyboard for the duration of a run. Generation and markdown rendering are portable and require neither. Known open items are tracked in the skill's `SECURITY.md` rather than left implicit. The ones most worth a reviewer's attention: `Bundle.path()` does not reject `..` components, which is unreachable from current callers because they all pass hardcoded relative paths but could be reintroduced by a refactor; evidence bundles carry no integrity signature, so post-run tampering is not detectable without a comparison run; and the pinned TMT version is a module constant, so a tool upgrade requires a code change or the diagnostic override. Two markdown link-check failures appear in `npm run validate:local` and are pre-existing on `main`, in files this PR does not touch: `https://www.omg.org/spec/DMN/1.4/` (HTTP 522) in `requirements-author` and `https://dev.azure.com` (unreachable) in `extension/PACKAGING.md`. Verified by reproducing both on a clean checkout of `origin/main`. --------- Co-authored-by: Jamie Kim <jamiekim500@gmail.com>
…tiple documents 🔄 - Generated by Copilot
- Modify partner workshop setup instructions and dates - Add context pack, requirements, experience, architecture, backlog, and publication readiness documents for FSI - Introduce context pack for Retail scenario - Ensure all documents are structured for collaborative workshop use 📚 - Generated by Copilot
- Introduce a detailed workshop agenda for the partner workshop setup - Update the partner workshop documentation to clarify access and approval processes - Expand the architecture draft for the FSI relationship manager with MVP details - Create a publication readiness draft outlining key requirements and user experience - Add a traceability matrix draft linking requirements to architecture and backlog items 📚 - Generated by Copilot
- replace "capstone" with "solution" in multiple instances - add new solution guide for integrating role outputs - refine participant flow steps for better guidance 📚 - Generated by Copilot
- correct link text for role exercises - enhance phrasing for better understanding - ensure consistency in document references 🔗 - Generated by Copilot
…r clarity and structure - Enhance formatting for better readability - Add bullet points for key features and requirements - Clarify roles and responsibilities in the publication checklist - Improve traceability matrix for better alignment with user needs 📄 - Generated by Copilot
🔍 - Generated by Copilot
🔄 - Generated by Copilot
- add detailed setup instructions for GitHub Codespaces and local VS Code - include workshop agenda and role exercise guidelines - refine requirements, architecture, backlog, and publication readiness drafts 📚 - Generated by Copilot
…n footer validation issues.
… documents - standardize titles and descriptions across multiple documents - remove draft indicators for clarity - ensure consistency in terminology ✍️ - Generated by Copilot
…e-partner-workshop into partner-workshop
… setup instructions - change ms.date to 2026-08-17 - enhance table formatting for better readability - consolidate note and tip sections for clarity 🔧 - Generated by Copilot
…arity - rename HVE Core section for consistency - enhance onboarding instructions for Microsoft Partner Workshop - remove redundant headings in context pack samples 📚 - Generated by Copilot
…files 🔧 - Generated by Copilot
- update HVE Core description for better understanding - correct phrasing in publication readiness checklist - enhance clarity in context pack retail document 🔍 - Generated by Copilot
- add sidebar position to README - remove redundant header from README - improve table formatting in publication readiness document 📝 - Generated by Copilot
🔒 - Generated by Copilot
- revise README and partner workshop files to enhance readability - standardize workshop agenda format across multiple documents - add new implementation guide and role tracks documentation - update publication readiness section for better guidance 📚 - Generated by Copilot
Author
|
Discard pull request, this was incorrectly intended for my local |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #2735 +/- ##
=======================================
Coverage 83.22% 83.22%
=======================================
Files 180 180
Lines 32310 32310
Branches 25 25
=======================================
Hits 26889 26889
Misses 5418 5418
Partials 3 3
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request
Description
Related Issue(s)
Type of Change
Select all that apply:
Code & Documentation:
Infrastructure & Configuration:
AI Artifacts:
hve-builderand addressed all actionable findings.github/instructions/*.instructions.md).github/prompts/*.prompt.md).github/agents/*.agent.md).github/skills/*/SKILL.md).github/hooks/*/*.json)evals/)Other:
.ps1,.sh,.py)Sample Prompts (for AI Artifact Contributions)
User Request:
Execution Flow:
Output Artifacts:
Success Indicators:
For detailed contribution requirements, see:
Testing
Checklist
Required Checks
AI Artifact Contributions
hve-builderreview mode to review contributionhve-builderreviewRequired Local Checks
The following local-safe validation commands must pass before merging:
npm run validate:localnpm run validate:docsnpm run spell-checknpm run lint:md-linksSecurity Considerations
Additional Notes